- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在让 Xamarin 在我的移动应用程序中显示图像时遇到了一些问题。当我使用 Image 放入图像时,它工作正常,但是当我尝试设置与 titleIcon 相同的图像或将图像放在按钮上时,它不起作用。这些情况有一些根本的区别吗?
相关设置:
public partial class ThisPage : ContentPage
{
...
public ThisPage(string data)
{
Content = new ScrollView()
{
Orientation = ScrollOrientation.Vertical,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
Margin = new Thickness(10, 0)
};
...
(Content as ScrollView).Content = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.CenterAndExpand,
};
...
StackLayout layout = (Content as ScrollView).Content as StackLayout;
完美运行
Title = titleString;
不起作用!
NavigationPage.SetTitleIcon(this as ContentPage, filename);
工作正常,表明我的 titleIcon 作为图像工作得很好
Image im = new Image
{
Source = filename,
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
};
layout.Children.Add(im);
至于按钮...
AddButton(buttonData, layout);
...
}
public void AddButton(string buttonData, StackLayout layout)
{
...
Button b = new Button
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
//CornerRadius = 14 //Does not compile
BorderRadius = 14 //Gives a warning telling me that I should use CornerRadius instead
};
这很好用
b.Text = buttonText;
这根本行不通。
b.Image = filename;
按钮总是出现在页面上,只是上面没有图像。手动放大按钮和/或省略文本也不会导致显示图像。
layout.Children.Add(b);
}
}
更多数据:
在运行 Android 版本 6.0.1 的 DuraForce Pro 上使用 Xamarin Live 应用进行测试。
Visual Studio Community 2015 中的“运行”按钮显示“KYOCERA KYOCERA-E6820 Player (Android 6.0 - API23)”。
安装到项目中的 Xamarin.Forms 版本 (NuGet) 是最新稳定版 2.5.0.280555
编辑:
感谢下面的 Dennis Schröer,图像现在可以很好地用于按钮,但它们仍然不能用作标题图标。
我尝试用于标题图标的图像是 80 x 578 像素的 jpg。
它在Android子项目的Resources/drawable文件夹中作为AndroidResource,在iOS子项目的Resources文件夹中作为BundleResource。
我还不能测试应用程序的 iOS 版本,因为我最近无法更新到最新版本的 XCode。 (最新版本与我之前连接 PC 以编译 iOS 版本的 Mac 不兼容)。因此,我现在只调试 Android 版本。
我也试过直接在页面的 xaml 文件中设置属性,但没有用:
<?xml version="1.0 encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApplicationName.Views/ThisPage"
NavigationPage.TitleIcon="Logo.jpg"
</ContentPage>
我也尝试过将它作为 ImageView 直接添加到 Toolbar.axml 中,但这也没有成功:
<?xml version="1.0" encoding="UTF-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/Logo.jpg"
android:layout_gravity="center"
/>
</android.support.v7.widget.Toolbar>
对于任何想要查看我根据 Dennis Schröer 的建议所做的更改的人,这里是新的 AddButton:
public void AddButton(String current, StackLayout layout)
{
string[] segments = current.Split('|');
string link = null;
Button b = null;
Image im = null;
int i = 0;
foreach (string segment in segments)
{
switch (i)
{
case 0:
{
link = segment;
}
break;
case 1:
{
if (segment.Length > 0)
{
b = new Button
{
Text = segment,
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
//CornerRadius = 14 //Does not compile: "'Button' does not contain a definition for 'CornerRadius'
BorderRadius = 14 //Gives a warning: "'Button.BorderRadius' is obsolete: 'BorderRadius is obsolete as of 2.5.0. Please use CornerRadius instead.'"
};
}
}
break;
case 2:
{
im = new Image
{
Source = segment,
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand
};
}
break;
}
i++;
}
if (im != null)
{
TapGestureRecognizer tap = new TapGestureRecognizer();
if ((link.StartsWith(c_linkType)) || (link.StartsWith(c_mailType)))
{
tap.Tapped += (o, e) =>
{
LinkClicked(link);
};
}
else
{
tap.Tapped += (o, e) =>
{
ButtonClicked(link);
};
}
im.GestureRecognizers.Add(tap);
layout.Children.Add(im);
}
if (b != null)
{
if ((link.StartsWith(c_linkType)) || (link.StartsWith(c_mailType)))
{
b.BackgroundColor = Color.White;
b.TextColor = Color.Blue;
b.BorderColor = Color.White;
b.BorderWidth = 0;
b.Clicked += (o, e) =>
{
LinkClicked(link);
};
}
else
{
b.BackgroundColor = new Color(186.0 / 256.0, 39.0 / 256.0, 45.0 / 256.0);
b.TextColor = Color.White;
b.Clicked += (o, e) =>
{
ButtonClicked(link);
};
}
layout.Children.Add(b);
}
}
最佳答案
I've also tried to add it directly into Toolbar.axml as an ImageView, but that was not successful either:
不要添加.jpg
,请使用这个:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/Logo"
android:layout_gravity="center"
/>
或者您可以将 android:id="@+id/toolbarImage"
添加到您的 ImageView
:
<ImageView
android:id="@+id/toolbarImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/Logo"
android:layout_gravity="center"
/>
并在您的 MainActivity
下方添加此 LoadApplication(new App());
:
ImageView toolbarImg = this.FindViewById<ImageView>(Resource.Id.toolbarImage);
toolbarImg.SetImageResource(Resource.Drawable.Logo);
关于c# - Xamarin 在某些情况下不显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121375/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!