Макет Android: измерьте вид, чтобы выбрать правильный размер шрифта TextView - PullRequest
0 голосов
/ 30 сентября 2011

В настоящее время я работаю над деятельностью, в которой есть компоненты с весом.Эти компоненты содержат текст и значки.Насколько я знаю, Android не предоставляет возможности для масштабирования текста в соответствии с его родительским представлением.Как следствие, мне нужно измерить эти представления, а затем вручную применить свой собственный шрифт к TextViews и установить соответствующий размер шрифта.

В настоящее время я делаю это следующим образом (что на самом деле работает. Но я часто получаю09-30 17: 55: 14.844: ОШИБКИ / ViewRoot (12893): поверхность блокировки OutOfResourcesException), и я считаю, что это может быть связано с тем, как я делаю свой макет.Есть несколько рядов)

<RelativeLayout 
    android:layout_height="0dip" 
    android:layout_width="fill_parent" 
    android:layout_weight="0.35"
    android:id="@+id/activity_main_row_1">
    <View
        android:layout_width="6dip"
        android:layout_height="fill_parent"
        android:background="@color/palette_green"
        android:layout_alignParentLeft="true"
    />
    <RelativeLayout 
        android:layout_centerVertical="true"
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent"
        android:paddingLeft="20dip">
        <TextView 
            android:id="@+id/activity_main_row_1_title" 
            android:text="@string/title_add_expense" 
            android:textSize="10dip"
            android:textColor="@color/palette_grey"
            android:layout_alignParentLeft="true" 
            android:layout_alignParentTop="true" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="0px">
        </TextView>
        <TextView 
            android:id="@+id/activity_main_row_1_sub_title" 
            android:text="@string/subtitle_add_expense" 
            android:textSize="10dip"
            android:textColor="@color/palette_dark_grey"
            android:layout_alignParentLeft="true" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_margin="0px"
            android:layout_below="@+id/activity_main_row_1_title">
        </TextView>
    </RelativeLayout>
    <ImageView 
        android:id="@+id/activity_main_row_1_bracket" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/icon_bracket_right_grey" 
        android:paddingLeft="0dip"
        android:paddingRight="0dip"
        android:paddingTop="24dip"
        android:paddingBottom="20dip"
        android:layout_alignParentRight="true">
    </ImageView>

</RelativeLayout>

Вот как я делаю измерения:

в onCreate:

LinearLayout mLayout = (LinearLayout) this.getLayoutInflater().inflate(R.layout.activity_main, null);
    mLayout.getViewTreeObserver().addOnGlobalLayoutListener(this);
    this.setContentView(mLayout);

В onGlobalLayout:

@Override
public void onGlobalLayout() {

    int mRow1Height = mRow1.getHeight();
    <omitted>


    if(mRow1Height>0) {
        TextView row1Title = (TextView) findViewById(R.id.activity_main_row_1_title);
        row1Title.setTypeface(mFontProvider.getTypeface());
        row1Title.setTextSize((float) ((mRow1Height)*.3));

        TextView row1SubTitle = (TextView) findViewById(R.id.activity_main_row_1_sub_title);
        row1SubTitle.setTypeface(mFontProvider.getTypeface());
        row1SubTitle.setTextSize((float) ((mRow1Height)*.2));
    }

Это правильный способ сделать то, что я хочу сделать?

Большое спасибо за ваш совет.

Приветствия

1 Ответ

1 голос
/ 06 октября 2011

Я обнаружил проблему, которая вызывала исключения OutOfResourcesException.В onLayout я устанавливаю текст для TextView.Это приводит к тому, что представление будет снова размечено, что приведет к возникновению бесконечного цикла.

Однако мне все равно будет интересно узнать, является ли использование addOnGlobalLayoutListener и onLayout единственным способом масштабирования TextView относительноДинамические размеры родительских представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...