2

カスタム属性を xml の値で設定できることは知っていますが、後で実行時にその値を変更できますか?

私はこのxmlを持っています:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:example="http://schemas.android.com/apk/res/ValidatedButton.ValidatedButton"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <validatedbutton.ValidatedButton
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/icon_selector"
        example:state_valid="false"
        android:text="@string/hello" />
</LinearLayout>

実行時に example:state_valid を true または false に変更したい。

4

2 に答える 2

2

これは古い質問であることは承知していますが、最近、同様に理解しようとしているものでもあります。

たまたま、Android MNC SDK のリリースにより、 Data Bindingを使用して多くの優れた機能が提供されました。公式のドキュメントとガイドはここにあります。本当に優れたチュートリアルはここにあります。

私は実際にこれをあまり調べていませんが、この新しい方法を使用することで元の質問を達成できると信じています. これが役立つかどうかを教えてください!

于 2015-07-31T09:07:00.380 に答える
0

いいえ、できません。

しかし、以下では醜い回避策を見つけることができます:

ビューを構築する 2 つの方法を区別する必要があると思います。

  1. * xmlからの静的レイアウトのインフレート
  2. Javaのランタイムでビルドする

カスタム ビューのコンストラクターで、レイアウトで定義された静的属性値を取得し、それらをカスタム ビュー クラス フィールドに保存できます。次に、フィールドに格納された値を使用してビューを構築します。ビューは何らかのコンテキスト (アクティビティのコンテキストなど) で構築されるため、理論的にはカスタム アクティビティにコンテキストをキャストして、「属性値」を変更するかどうかに関係なく情報を取得できますが、xml 値ではなく Java 変数のみを変更します。

私の意見では、ビューが非常に動的で頻繁に変更される場合は、単純なコンテナー (FrameLayout など) だけを XML に配置することを検討する必要があります。次に、ビューを作成し、実行時にコンテナーに追加します。

于 2014-12-12T15:00:19.897 に答える