2

Я хочу выровнять TextView над EditText. Следующий код работает хорошо, когда TextView не превышает расстояние между верхним полем (красная линия) и EditText (зеленая линия), как на снимке экрана.Выровнять TextView над EditText

Проблема возникает, когда TextView имеет больше строк, чем на скриншоте: он просто «переполняет» EditText, но я хочу сохранить EditText на переднем плане.

Другими словами: я хотел бы поместить нижнее поле TextView на зеленую линию и позволить ему расти в направлении красной линии, чтобы сохранить видимость EditText.

enter image description here

// LINEAR LAYOUT 
LinearLayout layout = new LinearLayout(getApplicationContext()); 
layout.setOrientation(LinearLayout.VERTICAL); 
setContentView(layout); 

// TEXTVIEW 
// how to set bottom margins programmatically? 
layout.addView(tv); 

// EDITTEXT 
// place the EditText to the bottom of the layout, working well 
et.setGravity(Gravity.BOTTOM); 
et.setInputType(InputType.TYPE_CLASS_TEXT); 

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
params.gravity = Gravity.BOTTOM; 
et.setLayoutParams(params); 
layout.addView(et); 
+0

поля вводятся в 'params' – njzk2

+0

Попробуйте установить высоту TextView в 0dp и вес в 1. – Peregreen

ответ

2

Это должно сделать это для вас:

// LINEAR LAYOUT 
LinearLayout layout = new LinearLayout(getApplicationContext()); 
layout.setOrientation(LinearLayout.VERTICAL); 
setContentView(layout); 

// TEXTVIEW 
LinearLayout.LayoutParams paramstv = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1f); 
tv.setLayoutParams(paramstv); 
layout.addView(tv); 

// EDITTEXT 
et.setGravity(Gravity.BOTTOM); 
et.setInputType(InputType.TYPE_CLASS_TEXT); 

LinearLayout.LayoutParams etparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,8f); 
etparams.gravity = Gravity.BOTTOM; 
et.setLayoutParams(etparams); 
layout.addView(et); 

Я предполагаю, что ключ действительно обернуть как EditText и TextView в LayoutParams. Возможно, вам нужно настроить вес.

Если этот файл не работает, попробуйте создать макет с XML-файлом (обработка там проще).

+0

спасибо! работал для меня (без XML) – blackst0ne

0

Вы можете установить свойство типа EditText в textMultiline.

1

Попробуйте использовать относительное расположение, а и установить EditText на дне родителя .. В случае, если вы не хотите, чтобы перейти к относительному макету попытайтесь объявить редактировать текст перед текстовым ..

0

Как вам «использует LinearLayout, установите weight для просмотров

LinearLayout.LayoutParams paramTextView = new LinearLayout.LayoutParams(
         LayoutParams.MATCH_PARENT, 
         LayoutParams.MATCH_PARENT, 1.0f); 
tv.setlayoutParams(paramTextView); 

LinearLayout.LayoutParams paramEditText = new LinearLayout.LayoutParams(
         LayoutParams.MATCH_PARENT, 
         LayoutParams.MATCH_PARENT, 3.0f); 
et.setlayoutParams(paramEditText); 

Это даст вам результат вы ожидаете

0

Это ниже XML-кода может решить вашу проблему ...

<RelativeLayout 
android:layout_height="match_parent" 
android:layout_width="match_parent"> 

<SrollView 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
android:layout_above="@+id/edittext_id" 
android:layout_margin="7dp"> 

<TextView 
     android:id="@+id/text_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</SrollView> 
<EditText 
android:id="@+id/edittext_id" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="10dp" 
android:layout_alignParentBottom="true"/> 

</RelativeLayout> 
Смежные вопросы