【问题标题】:textview visibility xamarin androidtextview 可见性 xamarin android
【发布时间】:2020-12-06 22:12:47
【问题描述】:

我创建了一个图像视图,在它之上我创建了一个文本视图。我的目标是,如果有图像,我想显示我的图像视图,如果没有,我想删除图像视图并显示显示“无图像”的文本视图,这是我的 xml 代码:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
        <TextView
             android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Item Image: "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView9"
             android:textColor="@android:color/holo_blue_dark"/>
    <ImageView
            android:src="@android:drawable/ic_menu_gallery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minWidth="25px"
            android:minHeight="25px"
            android:id="@+id/imageView1"
             android:layout_toRightOf="@id/textView9"/>  
            
            <TextView
             android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="No Image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView10"
             
         android:layout_toRightOf="@id/textView9"
         />

        
        </RelativeLayout>

这是我的代码:

ImageView imgv = view.FindViewById<ImageView>(Resource.Id.imageView1);
textview10 = view.FindViewById<TextView>(Resource.Id.textView10);
            textview10.Visibility = ViewStates.Invisible;

 private void Ws_getimg_clrCompleted(object sender, WSitems.getimg_clrCompletedEventArgs e)
        {
            Byte[] data = e.Result.datab;
            if (data != null)
            {
               
                MemoryStream mem = new MemoryStream(data);
                Android.Graphics.Bitmap originBitmap = BitmapFactory.DecodeStream(mem);
                imgv.SetImageBitmap(originBitmap);
            } 

            else
            {
                
                imgv.Visibility = ViewStates.Gone;
                textview10.Visibility = ViewStates.Visible;
                
            }
}

我从网络服务获取图像。问题是当没有图像但文本视图不可见时,只有图像视图正在消失。为什么?我该怎么办?提前致谢。

【问题讨论】:

    标签: xamarin.android textview imageview visibility


    【解决方案1】:

    您可以使用FFImageLoading 替换您的webservice 以在互联网上加载图像。

      ImageView imageView1 = FindViewById<ImageView>(Resource.Id.imageView1);
                TextView textView10 = FindViewById<TextView>(Resource.Id.textView10);
                textView10.Visibility = ViewStates.Invisible;
               // string urlToImage = "http://www.123raw.com/includes/templates/custom/images/123raw_mainpic_01.jpg";
                string urlToImage = "http://www.123raw.com/includes/templates/custom/images/12311raw_mainpic_01.jpg";
    
                var config = new FFImageLoading.Config.Configuration()
                {
                    ExecuteCallbacksOnUIThread = true
                };
                ImageService.Instance.Initialize(config);
                ImageService.Instance.LoadUrl(urlToImage).Error(exception =>
                {
                    imageView1.Visibility = ViewStates.Gone;
                    textView10.Visibility = ViewStates.Visible;
                }).Into(imageView1);
    

    这里正在运行 GIF,如果图像无法加载。

    【讨论】:

    • 如果以上回答对您有帮助,请不要忘记采纳为回答(点击此回答左上角的“✔”),对有类似问题的其他人会有所帮助
    • 谢谢先生,但我的图像是在 sql server 的数据库中找到的,它是二进制的,这就是为什么我使用 MemoryStream mem = new MemoryStream(data);以及它后面的行来重新创建我的图像,这就是我使用网络服务的原因,我还能使用你建议的代码吗?
    • @ranahdr 你能提供一个测试演示(可以重现这个问题)给我们吗?
    • 当你设置imgv.Visibility = ViewStates.Gone; textview10.Visibility = ViewStates.Visible;时,请尝试将MainThread.BeginInvokeOnMainThread包装成这样的线程:docs.microsoft.com/en-us/xamarin/essentials/main-thread
    • 非常感谢先生的帮助。从您的回答中,我能够进行一些研究,并且发现 ImageService.Instance 也具有 LoadStream 元素。因此,在您的回答和以下回答 stackoverflow.com/questions/49959103/… 的帮助下,我解决了这个问题。我要写我的答案。
    【解决方案2】:

    这是我的代码:

     Task<Stream> GetStreamFromImageByte(CancellationToken ct)
            {
                           
    
                //Since we need to return a Task<Stream> we will use a TaskCompletionSource>
                TaskCompletionSource<Stream> tcs = new TaskCompletionSource<Stream>();
                if (data != null)
                {
                    tcs.TrySetResult(new MemoryStream(data));
                }
                return tcs.Task;
            }
            private void Ws_getimg_clrCompleted(object sender, WSitems.getimg_clrCompletedEventArgs e)
            {
                data = e.Result.datab;
                
                var config = new FFImageLoading.Config.Configuration()
                {
                    ExecuteCallbacksOnUIThread = true
                };
                ImageService.Instance.Initialize(config);
                ImageService.Instance.LoadStream(GetStreamFromImageByte).Error(exception =>
                {
                    imgv.Visibility = ViewStates.Gone;
                    textview10.Visibility = ViewStates.Visible;
                }).Into(imgv);
    

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2016-04-11
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多