Android Xamarin:为所有容器应用字体';孩子们

Android Xamarin:为所有容器应用字体';孩子们,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我使用以下代码将字体应用于布局中的所有视图: var mainLayout = FindViewById<RelativeLayout>(Resource.Id.mainLayout); for (int i = 0; i < mainLayout.ChildCount - 1; i++) { if (mainLayout.GetChildAt(i) is TextView) {

我使用以下代码将字体应用于布局中的所有视图:

var mainLayout = FindViewById<RelativeLayout>(Resource.Id.mainLayout);
for (int i = 0; i < mainLayout.ChildCount - 1; i++)
            {
                if (mainLayout.GetChildAt(i) is TextView)
                {
                    ((TextView)mainLayout.GetChildAt(i)).SetTypeface(tf, TypefaceStyle.Bold);
                }
                else if (mainLayout.GetChildAt(i) is EditText)
                {
                    ((EditText)mainLayout.GetChildAt(i)).SetTypeface(tf, TypefaceStyle.Bold);
                }
                else if (mainLayout.GetChildAt(i) is Button)
                {
                    ((Button)mainLayout.GetChildAt(i)).SetTypeface(tf, TypefaceStyle.Bold);
                }

            }
var mainLayout=findviewbyd(Resource.Id.mainLayout);
对于(int i=0;i
布局:

<?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="@drawable/background_pattern"
                android:id="@+id/mainLayout"
    >
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="25dp"
        android:contentDescription="@string/content_dexcription_logo"
        android:src="@drawable/ic_launcher" />
    <TextView
        android:id="@+id/title"
        style="@style/AuthTitle" />
    <TextView
        android:id="@+id/subtitle"
        style="@style/AuthTitle.AuthSubtitle" />
    <LinearLayout
        android:id="@+id/editTextLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/subtitle"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/login_vertical_margin"
        android:background="@drawable/login_box_radius"
        android:orientation="vertical"
        android:paddingBottom="@dimen/login_vertical_margin"
        android:paddingLeft="@dimen/login_horizental_padding"
        android:paddingRight="@dimen/login_horizental_padding"
        android:paddingTop="@dimen/login_vertical_margin">
        <EditText
            android:id="@+id/usernameField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/username_hint"
            android:textColorHighlight="@color/light_gray"
            android:textSize="17sp">
            <requestFocus />
        </EditText>
        <EditText
            android:id="@+id/passwordField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:ems="10"
            android:hint="@string/password_hint"
            android:inputType="textPassword"
            android:textColorHighlight="@color/light_gray"
            android:gravity="right"
            android:textSize="17sp" />
        <Button
            android:text="Login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnLogin" />
    </LinearLayout>
</RelativeLayout>

但是,它只适用于
TextView
s.

有什么想法吗?

您需要循环视图组本身的子对象。目前,您的代码只是忽略它们

此外,不需要检查它是Button还是EditText,因为它们都扩展了TextView,因此检查它是否是TextView的实例就足够了

下面是一个普通java/android的示例:

递归方法:

public void loopViewGroup(ViewGroup viewGroup) {
    for (int i=0; i<viewGroup.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);
        if (child instanceof TextView) {
            // Extends TextView (EditText, Button etc.)
            ((TextView) child).setTypeface(tf, TypefaceStyle.Bold);
        } else if (child instanceof ViewGroup) {
            // Is a ViewGroup (layout)
            loopViewGroup((ViewGroup) child);
        }
    }
}
loopViewGroup(findViewById(R.id.mainLayout));