在重复布局中设置字体类型

时间:2017-09-18 19:49:02

标签: android view fonts

我有一个布局,包括一个布局,重复两次("包括"):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorButtonNiebieski">

    <!-- LAYOUT GRACZ (A) -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1.0"
        android:orientation="vertical">

       <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.45"
        android:scaleY="-1"
        android:scaleX="-1"
        android:paddingBottom="10dp">

        <include
            android:id="@+id/lay1"
            layout="@layout/layout_pojedynek_duplikat" />

    </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.05"
            android:gravity="center"
            android:scaleY="-1"
            android:scaleX="-1">

            <TextView
                android:id="@+id/txt_gracz_A_liczba_punktow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2"
                android:textSize="30dp"
                android:textColor="@color/colorWhite"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.05"
            android:gravity="center">

            <TextView
                android:id="@+id/txt_gracz_B_liczba_punktow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="7"
                android:textSize="30dp"
                android:textColor="@color/colorWhite"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.45"
            android:paddingBottom="10dp">

            <include
                android:id="@+id/lay2"
                layout="@layout/layout_pojedynek_duplikat" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

layout_pojedynek_duplikat.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1.0">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:weightSum="1.0"
        android:background="#00ff0000"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.3"
            android:gravity="center">

            <TextView
                android:id="@+id/txt_gracz_A_i_B_nazwa"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="POLSKA"
                android:textSize="40dp"
                android:textColor="@color/colorWhite"/>

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.7"
            android:gravity="center">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:weightSum="1.0">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:weightSum="1.0"
                    android:layout_weight="0.5"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/img_pojedynek_wariant_A"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="0.5"
                        android:src="@drawable/argentyna"
                        android:padding="5dp"
                        android:adjustViewBounds="true"/>

                    <ImageView
                        android:id="@+id/img_pojedynek_wariant_B"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="0.5"
                        android:src="@drawable/kambodza"
                        android:padding="5dp"
                        android:adjustViewBounds="true"/>

                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:weightSum="1.0"
                    android:layout_weight="0.5"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/img_pojedynek_wariant_C"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="0.5"
                        android:src="@drawable/watykan"
                        android:padding="5dp"
                        android:adjustViewBounds="true"/>

                    <ImageView
                        android:id="@+id/img_pojedynek_wariant_D"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="0.5"
                        android:src="@drawable/polska"
                        android:padding="5dp"
                        android:adjustViewBounds="true"/>

                </LinearLayout>

            </LinearLayout>
        </RelativeLayout>

    </LinearLayout>

</LinearLayout>

在java文件中,我尝试为txt_gracz_A_i_B_nazwa文本字段设置字体:

TextView txt_gracz_A_i_B_nazwa = (TextView) findViewById(R.id.txt_gracz_A_i_B_nazwa);
txt_gracz_A_i_B_nazwa.setTypeface(myFontBold);

但这只为一个视图设置了字体:

enter image description here

如何解决此问题?

3 个答案:

答案 0 :(得分:0)

为每个视图做那个。或者创建一个新的View类,它是TextView的一个子类并设置字体,并使用它而不是TextView。

是的,Android的字体操作很糟糕。

答案 1 :(得分:0)

当您调用Activity.findViewById()时,系统将从根开始遍历您的视图层次结构,直到找到具有给定ID的视图。换句话说,Activity.findViewById()将在您的布局中返回带有该ID的第一个视图。它将返回带有该ID的所有视图。

出于这个原因,通常建议不要在单个布局中重复使用ID。但是,这个建议通常不实用,你不应该对你当前的布局感到不好。但这确实意味着您需要拨打TextView.setTypeface()两次,并且您需要某种方式来访问ID为txt_gracz_A_i_B_nazwa第二个视图。

您可以通过使用findViewById()限制搜索范围来执行此操作。而不是使用Activity.findViewById(),而是使用View.findViewById()。所以你可以这样写:

View lay1 = findViewById(R.id.lay1);
TextView txt1 = (TextView) lay1.findViewById(R.id.txt_gracz_A_i_B_nazwa);
txt1.setTypeface(myFontBold);

View lay2 = findViewById(R.id.lay2);
TextView txt2 = (TextView) lay2.findViewById(R.id.txt_gracz_A_i_B_nazwa);
txt2.setTypeface(myFontBold);

答案 2 :(得分:0)

看起来像一个小的逻辑缺陷。重复使用相同布局两次的问题是,虽然它们代表两个完全不同的UI元素,但它们具有相同的ID。

lay1.findViewById(your_text_field_id).setFontType lay2.findViewById(your_text_field_id).setFontType

应该修理你。你不能使用通用的findViewById,因为它会抓住第一个并使用它。希望有所帮助。