У меня есть деятельность с линейным расположением. Он имеет два вида - одну кнопку и один пользовательский вид ниже. Я хочу, чтобы иметь возможность настраивать пользовательскую высоту программно (он будет вычисляться во время запуска с изображения, нарисованного на нем). И я хочу, чтобы кнопка над ним заполнила оставшееся пространство. Как достичь этого? До сих пор у меня есть этот XML-код:Как программно переопределить атрибут высоты 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 к кнопке, так что оно заполняет оставшееся пространство. И так как требуется предоставить некоторую ценность, я дал фиксированный 50dp для пользовательского представления. Теперь я попытался изменить высоту, используя этот код:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
this.setLayoutParams(layoutParams);
this.requestLayout();
Но это ничего не делать, независимо от того, где я поставил его - будь то в конструкторах The View или в методе OnDraw().
// EDIT: Дополнительная информация: пользовательский вид наследует непосредственно от просмотра и переопределяет метод только OnDraw(), чтобы сделать некоторые вещи на себя.
Side Примечание: если ваш '' PianoView' расширяет ImageView', вы можете быть в состоянии сделать это полностью в XML. Взгляните на http://stackoverflow.com/a/19316787/996592 для деталей. –
На самом деле, дополнительная информация о PianoView в целом может быть полезна. Можете ли вы опубликовать источник? На что он наследуется? Как это принято? Переопределяет ли он onMeasure() или onLayout()? –
ссылка на эту тему http://stackoverflow.com/questions/15501831/add-layout-with-parameters-programmatically-android – sarath19