如何解决如何检查控件是否适合屏幕区域或超出范围?
如果有耐心的人可以纠正我的代码,我真的很感激(编码不是我的工作)。
按下 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>
产生如图所示的界面:
正如您在 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组件之前调用getWidth
、getHeight
、getX
、getY
等通常返回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 举报,一经查实,本站将立刻删除。