我在让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播放器(Android 6.0 - API23)”。
安装到项目中的Xamarin.Forms版本(NuGet)是最新稳定的2.5.0.280555
编辑:
感谢下面的DennisSchrö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>
对于任何想要根据DennisSchrö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);
}
}
答案 0 :(得分:1)
我也尝试将它作为ImageView直接添加到Toolbar.axml中,但这也不成功:
请勿添加.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);