微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查控件是否适合屏幕区域或超出范围?

如何解决如何检查控件是否适合屏幕区域或超出范围?

如果有耐心的人可以纠正我的代码,我真的很感激(编码不是我的工作)。

按下 button1,我会检查作为 TextView 的控件当前是否在屏幕外,因为根据设备屏幕尺寸有很多控件,但我不知道怎么做。 (我仍然检查了其他类似的帖子,但我没有理解,很抱歉,但这就是我在这里的原因)

这是我的Activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <GridLayout
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="5"
        android:rowCount="6"
        android:id="@+id/gridLayout1">
        <RadioButton
            android:text="Total:"
            android:layout_columnWeight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/radioButtonFT"
            android:checked="true" 
            android:tooltipText="Fissa % di H2O" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTotFlour"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="10"
            android:gravity="right" />
        <TextView
            android:text="kg"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView2"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTotFlourPer100"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="100"
            android:enabled="false"
            android:gravity="right" />
        <TextView
            android:text="%"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView3"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <RadioButton
            android:text="H2O:"
            android:layout_columnWeight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/radioButtonH2O" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextH2O"
            android:maxWidth="150px"
            android:text="6"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:gravity="right" />
        <TextView
            android:text="l"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView11"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextH2OPer100"
            android:maxWidth="150px"
            android:text="60"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:gravity="right" />
        <TextView
            android:text="%"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView12"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <TextView
            android:text=" Something:"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView13"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <EditText
            android:inputType="numberDecimal"
            android:layout_columnWeight="1"
            android:id="@+id/editTextSaltPer100"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="35"
            android:gravity="right" />
        <TextView
            android:text="g"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView14"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <EditText
            android:inputType="numberDecimal"
            android:layout_columnWeight="1"
            android:id="@+id/editTextSalt"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="21"
            android:gravity="right" />
        <TextView
            android:text="g"
            android:layout_columnWeight="1"
            android:maxWidth="30px"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView15"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
    </GridLayout>

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="20px"
        android:layout_weight="0" 
        android:id="@+id/relativeLayout1">
        <View
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/viewDivider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_centerVertical="true"
            android:background="#808080" />
    </RelativeLayout>

    <GridLayout  
        android:minWidth="25px"
        android:minHeight="25px"    
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="6"
        android:rowCount="4"
        android:id="@+id/gridLayout2">
        <TextView
            android:layout_columnWeight="1"
            android:layout_columnSpan="6"
            android:text="Temperature"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textViewTH20"
            android:gravity="center_horizontal" />
        <TextView
            android:layout_columnWeight="1"
            android:text=" Ti:"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textViewTI"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:textAlignment="textEnd" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTI"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="21"
            android:gravity="right" />
        <TextView
            android:text="°"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView21"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <TextView
            android:layout_columnWeight="1"
            android:text="Ta:"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textViewTA"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textAlignment="textEnd" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTA"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="25"
            android:gravity="right" />
        <TextView
            android:text="°"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView23"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <TextView
            android:layout_columnWeight="1"
            android:text="Tf:"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textViewTF"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textAlignment="textEnd" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTF"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="24"
            android:gravity="right" />
        <TextView
            android:text="°"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView25"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <TextView
            android:text="Tm:"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textViewTM"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:textAlignment="textEnd" />
        <EditText
            android:layout_columnWeight="1"
            android:inputType="numberDecimal"
            android:id="@+id/editTextTM"
            android:maxWidth="150px"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="5"
            android:gravity="right" />
        <TextView
            android:text="°"
            android:layout_columnWeight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/textView26"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
    </GridLayout>

    <RelativeLayout             
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/relativeLayout2">
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:prompt="@string/dawn_media_prompt"
            android:layout_centerVertical="true"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:gravity="center" />
    </RelativeLayout>

    <Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button1" />

    <GridLayout
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/gridLayout3">
        <TextView
            android:text="Hello 1\nHello 2\nHello 3\nHello 4\nHello 5\n"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textViewInfo"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:clickable="true" />
    </GridLayout>
    
</LinearLayout>

产生如图所示的界面:

enter image description here

正如您在 XML 中看到的,textViewInfo 有大约 5 行文本,并且控件不适合屏幕。这就是我想要的。

MainActivity.cs 中,我尝试获得一个控件并对高度求和,但出了点问题。

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System;
using Xamarin.Essentials;
using Android.Views;
using Android.Graphics;

namespace abc_xamarin
{
    [Activity(Label = "@string/app_name",Theme = "@style/Theme.AppCompat",MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        RadioButton radioButtonFT,radioButtonH2O;
        Spinner spinner;
        TextView textViewInfo;
        GridLayout gridLayout1,gridLayout2,gridLayout3;
        RelativeLayout relativeLayout1,relativeLayout2;
        Button button1;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this,savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            radioButtonFT = FindViewById<RadioButton>(Resource.Id.radioButtonFT);
            radioButtonH2O = FindViewById<RadioButton>(Resource.Id.radioButtonH2O);

            relativeLayout1 = FindViewById<RelativeLayout>(Resource.Id.relativeLayout1);
            relativeLayout2 = FindViewById<RelativeLayout>(Resource.Id.relativeLayout2);
            gridLayout1 = FindViewById<GridLayout>(Resource.Id.gridLayout1);
            gridLayout2 = FindViewById<GridLayout>(Resource.Id.gridLayout2);
            gridLayout3 = FindViewById<GridLayout>(Resource.Id.gridLayout3);

            spinner = FindViewById<Spinner>(Resource.Id.spinner);
            spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner_ItemSelected);
            var adapter = ArrayAdapter.CreateFromresource(this,Resource.Array.dawn_media_array,Resource.Layout.custom_spinner_text);
            adapter.SetDropDownViewResource(Resource.Layout.custom_spinner_text);
            spinner.Adapter = adapter;

            radioButtonFT.CheckedChange += (o,e) =>
            rdBtnFT();

            radioButtonH2O.CheckedChange += (o,e) =>
            rdBtnH2O();

            textViewInfo = FindViewById<TextView>(Resource.Id.editTextTotFlour);

            button1 = FindViewById<Button>(Resource.Id.button1);
            
            button1.Click += (o,e) =>
            btnBtn();
        }

        public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);

            base.OnRequestPermissionsResult(requestCode,grantResults);
        }

        private void rdBtnFT()
        {
            if (radioButtonFT.Checked == true)
            {
                radioButtonH2O.Checked = false;
                //do something
            }
        }

        private void rdBtnH2O()
        {
            if (radioButtonH2O.Checked == true)
            {
                radioButtonFT.Checked = false;
                //do something
            }
        }

        private void spinner_ItemSelected(object sender,AdapterView.ItemSelectedEventArgs e)
        {
            Spinner spinner = (Spinner)sender;
        }

        private void btnBtn()
        {
            //checkScreenContext();
            //gridLayout1,relativeLayout1,relativeLayout2,button1,textViewInfo
            int sumY = 0;

            var location = new int[2];

            gridLayout1.GetLocationOnScreen(location);
            sumY = sumY + location[1];
            var sizeY = gridLayout1.Height;
            sumY = sumY + sizeY;

            //relativeLayout1.GetLocationOnScreen(location);
            sizeY = relativeLayout1.Height;
            sumY = sumY + sizeY;

            //gridLayout2.GetLocationOnScreen(location);
            sizeY = gridLayout2.Height;
            sumY = sumY + sizeY;

            //relativeLayout2.GetLocationOnScreen(location);
            sizeY = relativeLayout2.Height;
            sumY = sumY + sizeY;

            //button1.GetLocationOnScreen(location);           
            sizeY = button1.Height;
            sumY = sumY + sizeY;

            //textViewInfo.GetLocationOnScreen(location);
            sizeY = textViewInfo.Height;
            sumY = sumY + sizeY;

            string text = "Y: " + sumY.ToString();

            Toast.MakeText(this,text,ToastLength.Long).Show();
        }


    }
}

我也尝试了其他方法获取 textViewInfo 的位置,但我的位置为 (0,0)。

如果有人可以更正我的代码,我真的很感激。 谢谢!

解决方法

如果您想适合屏幕上的所有内容,您可以:使用 ScrollLayout,它可以让您向下滚动,以防内容太多无法适合您的屏幕;或者使用 ListLayout,这样您就可以只滚动您正在显示的项目列表。

看图片,我想需要两者的结合。

,

在界面上显示UI组件之前调用getWidthgetHeightgetXgetY等通常返回0

你可以打电话给View.post(Runnable)。通过查找该方法的定义,可以看到Runnable操作是在View的attachedToWindow()detachedFromWindow()之间执行的,此时View的位置已经计算完毕。

例如你想得到 textViewInfo 的位置:

textViewInfo.Post(() =>
        {
            var location = new int[2];
            textViewInfo.GetLocationOnScreen(location);
            // you could get the position here
        }); 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。