gpt4 book ai didi

android - 如何在 xml 中显示 android View 类和小部件

转载 作者:行者123 更新时间:2023-11-30 01:48:23 25 4
gpt4 key购买 nike

我试图在 xml 布局中显示一个类,该类在屏幕顶部扩展 View,在其下方显示两个 texview 和一个按钮,但是要么只显示 View 而没有下面的按钮,要么只显示下面的 View 和按钮如果我将 View 高度硬编码为 400dp,则会显示任何帮助,我们将不胜感激,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent">


<view class="....MyView"
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" //"400dp"
/>

<LinearLayout
android:id="@+id/graphCntrls"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myView"
>

<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="x coordinate"/>

<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="y coordinate"/>

<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="Calc" />

</LinearLayout>

</RelativeLayout>

最佳答案

CustomView 的默认大小为 0。除非它有 subview (并且派生自定义了 onLayout 的布局类),在这种情况下,默认大小是其 subview 的总和。

如果你想在自定义 View 上使用 wrap_content 而不仅仅是 subview 的集合,你需要覆盖 onLayout() 和/或 onMeasure()

解决方法如下:

<xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/rl"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<com.droid.pmk.stackoverflow1.MyView
android:id="@+id/myView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ccc"
/>

<LinearLayout
android:id="@+id/graphCntrls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myView"
android:orientation="vertical"
>

<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x coordinate"
android:textColor="@android:color/black"/>

<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="y coordinate"
android:textColor="@android:color/black"/>

<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calc"
android:textColor="@android:color/black"/>

</LinearLayout>

</LinearLayout>

如果要在我们的自定义 View 中改变View的默认行为,那么我们需要重写onMeasure。因此,测量 CustomView 是布局过程的一部分,它由两个主要步骤组成:测量和布局
measure pass 设置 View 应该有多大,它的尺寸,而 layout pass 设置 View 的放置位置,它的位置。

布局部分只对有 child 的 View 感兴趣,换句话说, View 继承自ViewGroup

因此,如果您将 CustomView 放在 LinearLayout 下方,那么它会像您预期的那样正常工作。但是您的 View 将低于布局,根据您的布局需求,这是不希望的。

<RelativeLayout
android:id="@+id/rl"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">

<LinearLayout
android:id="@+id/graphCntrls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>

<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x coordinate"
android:textColor="@android:color/black"/>

<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="y coordinate"
android:textColor="@android:color/black"/>

<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calc"
android:textColor="@android:color/black"/>

</LinearLayout>


<com.droid.pmk.stackoverflow1.MyView
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_below="@id/graphCntrls"
android:background="#ccc"
/>


</RelativeLayout>

这表明 wrap_content 将授予您的 MyView 权限,以便根据需要获取尽可能多的 RelativeLayout。在您的情况下,整个屏幕都被遗漏了。

希望对你有帮助。

关于android - 如何在 xml 中显示 android View 类和小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com