我有一个线性布局的活动。它有两个视图 - 一个按钮和一个自定义视图。我希望能够以编程方式设置自定义高度(它将在启动期间从绘制到其上的图像计算)。我希望它上面的按钮能够填满剩下的空间。怎么做到这一点? 到目前为止,我有这个XML代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc"
android:orientation="vertical"
tools:context="eu.example.app.PianoActivity">
<Button
android:id="@+id/dummy_button"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="@string/dummy_button"/>
<eu.example.app.PianoView
android:id="@+id/pianoView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:keepScreenOn="true"/>
</LinearLayout>
正如你所看到的,我在按钮上添加了1的重量和0dp的高度,因此它填充了剩余的空间。由于需要提供一些值,我给自定义View提供了固定的50dp。 现在我尝试使用以下代码更改高度:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
this.setLayoutParams(layoutParams);
this.requestLayout();
但无论我在哪里放置它 - 无论是在View的构造函数中还是在onDraw()方法中,它都没有做任何事情。
//编辑: 附加信息:自定义视图直接从View继承并仅覆盖onDraw()方法以在其自身上绘制一些内容。
答案 0 :(得分:1)
你应该使用
public void onWindowFocusChanged(boolean hasFocus) {}
设置高度和宽度的方法。
答案 1 :(得分:0)
将xml中的线性布局的id属性设置为: -
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
droid:id="@+id/liLay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc"
android:orientation="vertical"
tools:context="eu.example.app.PianoActivity">
<Button ---/>
<eu.example.app.PianoView---/>
</LinearLayout>
现在在onCreate()方法中初始化布局,如下: -
LinearLayout liLay = (LinearLayout)findViewById(R.id.liLay);
现在按步骤设置布局参数
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
liLay.setLayoutParams(layoutParams);
这会对你有帮助。
答案 2 :(得分:0)
使用此:
initWithNavigationBarClass:toolbarClass: