0

viewですから、私が読んでいた人は、 Java経由でスタイルを設定することは単に不可能だと読んでいました. そのような方法はmyView.setStyle("styleName")まだありません。

textvews次に、 、 、imageviewsまたはコンテナなどのコードでレイアウト要素を作成する場合、linearlayoutsそのスタイルをどのように設定しますか? 新しく作成された各要素のルールごとにルールを割り当てますか? または、このタスクを実行するためのより効率的な方法はありますか?

@編集

わかりました、私はそれを行う方法を考え出しました。私が使用しているソリューションで私の質問に答えます

4

4 に答える 4

1

スタイルを設定したいビューをサブクラス化し、実行時に適用したいスタイルを渡すことができます。カスタムフォントをTextViewに設定するだけの以下のクラスのようなもの。主に、スタイルを提供できる 3 番目のコンストラクターを調べる必要があります。

public class TextViewRoboto extends TextView {

    public TextViewRoboto(Context context) {
        super(context);
    }

    public TextViewRoboto(Context context, AttributeSet attrs) {
        super(context, attrs);
        setCustomFont(context, attrs);
    }

    public TextViewRoboto(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setCustomFont(context, attrs);
    }

    private void setCustomFont(Context ctx, AttributeSet attrs) {
        setCustomFont(ctx, "roboto-light.ttf");
    }

    public boolean setCustomFont(Context ctx, String asset) {
        Typeface tf = null;
        try {
            tf = Typefaces.get(ctx, asset);
        } catch (Exception e) {
            Logger.e("Could not get typeface: " + e.getMessage());
            return false;
        }

        setTypeface(tf);
        return true;
    }

}
于 2013-09-22T03:20:09.457 に答える
1

各 View またはそのサブクラスには、Style 引数を取る 3 番目のコンストラクターがあります。たとえば、このView のコンストラクター。このビューのスタイル リソース ID を指定するため、ビューの作成時に指定する必要があります。

ドキュメントから

このビューに適用するデフォルトのスタイル。0 の場合、スタイルは適用されません (テーマに含まれるものを超えて)。これは、現在のテーマから値が取得される属性リソース、または明示的なスタイル リソースのいずれかです。

于 2013-09-22T03:49:06.307 に答える
1

私が見つけた解決策目標は、以前は別の場所でスタイル設定されていた要素をプログラムで作成することです。

まず、res/layoutフォルダーに新しい XML ファイルを作成しました。これにtemplate.xmlという名前を付け、次のコードを挿入しました。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    style="@style/rootElement"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/firstChildId"
        style="@style/firstChild" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/secondChild" />

</LinearLayout>

そして、styles.xmlファイルで必要な方法でスタイルを設定しました

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="rootElement">
        <!-- style -->          
    </style>

    <style name="firstChild">
        <!-- style -->     
    </style>
</resources>

さて、Activity クラスに以下を追加しました。

LinearLayout rootElement = (LinearLayout) getLayoutInflater().inflate(R.layout.template, null);
someOtherView.addView(rootElement);

インフレータは、res/layout/template.xml で作成したテンプレート (そのファイル内のすべての要素とその属性) を読み込み、それに割り当ててからrootElement、私のコードで他の目的に使用します。例

TextView firstChild = (TextView) rootElement.getChildAt(0);
firstChild.setText("It is the firstChild element");

また

TextView firstChild = (TextView) rootElement.findViewById(R.id.firstChildId);
...

とても簡単ですね。それが役立つことを願っています

于 2013-09-24T04:07:27.393 に答える