gpt4 book ai didi

c# - Xamarin 在某些情况下不显示图像

转载 作者:太空狗 更新时间:2023-10-29 13:50:08 24 4
gpt4 key购买 nike

我在让 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com