У меня есть несколько квадратных TextViews в TableLayout. Я должен изменить размер текста программно. Не могу использовать новое «авторазмер», мне нужно самому установить размер текста.
Итак, мой подход состоит в том, чтобы иметь фиксированные layout_height и layout_width для TextViews в макете таблицы и использовать setTextSize в коде.
Проблема в том, что как только размер текста изменяется, начинают происходить странные вещи, причем не только с редактируемой TextView / ячейкой, но и с соседними!
При первом изменении размера текста затрагивается соседняя ячейка (см. Изображение). Это происходит как на реальном телефоне (API24), так и на эмуляторе (API 24, 28). При изменении размера текста во второй раз вторая ячейка возвращается в нормальное состояние на эмуляторе. На реальном устройстве размер первой ячейки снова изменяется или верхнее поле увеличивается.
![layout problems](https://i.stack.imgur.com/huDne.png)
Я пытался изменить различные настройки для TableLayout, TableRow и TextView (wrap_content, min / max Height), но ничто не решает проблему, за исключением комментирования setTextSize.
Мне нужно использовать TableLayout, поэтому заменить его на другой макет мне не вариант.
Почему это не работает?
Чтобы воспроизвести проблему, вставьте приведенный ниже макет и код в новый проект «пустое действие». На момент написания этой статьи я использовал новейшее программное обеспечение (Android Studio 3.2.1 с компиляцией SDK версии API 28, Java версии 1.8, min SDK версии 22.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:baselineAligned="false"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainContainer">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableLayout1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#000">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:background="#FFF"
android:textColor="#000"
android:id="@+id/textView1"
android:layout_margin="1dp"/>
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:background="#FFF"
android:textColor="#000"
android:layout_margin="1dp"/>
</TableRow>
</TableLayout>
<Button
android:layout_gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click"
android:id="@+id/button1"/>
</LinearLayout>
Код моей активности:
package app.howsmydriving.layoutproblem;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private String sContent = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
sContent += "A";
TextView tv = findViewById(R.id.textView1);
tv.setText(sContent);
if(sContent.length() < 3) {
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
} else {
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
}
}
});
}
}