Xamarin Android Widget: Как программно изменить высоту ImageView? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть widget.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
style="@style/WidgetBackground">
<ImageView
    android:id="@+id/myimage"
    android:layout_width="20dip"
    android:layout_height="20dip"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/myimage" />
<TextView
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"       
    style="@style/WidgetText.Title" />

Как я могу изменить размер изображения?

[Service]
public class UpdateService : Service
{
    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        var updateViews = new RemoteViews(context.PackageName, Resource.Layout.widget);
        // changing textsize works perfectly:
        updateViews.SetTextViewTextSize(Resource.Id.mytext, (int)ComplexUnitType.Sp, 14);
        updateViews.SetViewVisibility(Resource.Id.myimage, ViewStates.Gone);
        updateViews.SetTextViewText(Resource.Id.text, "new text");

        // but changing imagesize does not work, I didn't find a right way to set the size, need something like this:
        updateViews.SetInt(Resource.Id.myimage, "layout_width ???", 200dip ???);

            ComponentName thisWidget = new ComponentName(this, Java.Lang.Class.FromType(typeof(Widget)).Name);
            AppWidgetManager manager = AppWidgetManager.GetInstance(this);
            manager.UpdateAppWidget(thisWidget, updateViews);


    }

updateViews имеет несколько setInt, setFloat, Set .. но я не сделалНе найти правильный метод.Любой намек, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Невозможно изменить высоту или ширину ImageView в коде, но есть обходной путь.

Вы можете попробовать создать новый макет виджета, размер которого ImageViewты хочешь.Когда вы звоните RemoteViews(), используйте его вместо оригинального.И когда вы обновите виджет, он будет перерисован.Например:

    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        //var updateViews = new RemoteViews(this.PackageName, Resource.Layout.widget);
        //Using another layout instead.
        var updateViews = new RemoteViews(this.PackageName, Resource.Layout.layout1);

        ComponentName thisWidget = new ComponentName(this, Java.Lang.Class.FromType(typeof(MyWidget)).Name);
        AppWidgetManager manager = AppWidgetManager.GetInstance(this);
        manager.UpdateAppWidget(thisWidget, updateViews);
        ///...
        ///...

    }

Или вы можете также попытаться добавить множество ImageView разного размера в макет и установить Visibility в Gone.Показать тот, который вы хотите отобразить в коде, позвонив SetViewVisibility().

0 голосов
/ 08 июня 2018

Вы можете попробовать этот метод:

var videoContainer = FindViewById<RelativeLayout>(Resource.Id.local_video_container);
var parameters = videoContainer.LayoutParameters;
parameters.Height = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, containerHeight, Resources.DisplayMetrics);
parameters.Width = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, containerWidth, Resources.DisplayMetrics);
videoContainer.LayoutParameters = parameters;
...