【问题标题】:Xamarin not showing images in some casesXamarin 在某些情况下不显示图像
【发布时间】:2018-08-13 18:03:40
【问题描述】:

让 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)”。

安装到项目 (NuGet) 中的 Xamarin.Forms 版本是最新稳定版 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);
    }
}

【问题讨论】:

  • 请参考this。
  • 我在最初研究如何让图像显示时发现。该页面包含帮助我使 Image 正常工作并让我了解 SetTitleIcon() 的信息。不过,据我所知,根据您链接的页面,我的标题图标代码应该可以正常工作。
  • 那么,图片还是不显示?
  • 如果您没有找到解决方案:您可以使用带有TapGestureRecognizer 的Image 作为Button 的替代品。
  • 你能告诉我你的Logo在哪里吗?请给我看一张照片。或者请尝试logo 而不是Logo。

标签: c# android image xamarin button


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2014-07-16
    • 2023-03-16
    • 2020-05-04
    相关资源
    最近更新 更多