3

linearLayout の重みメカニズムを置き換えることを目的とした、新しいカスタマイズされたビューを作成しました。レイアウト xml ファイル内で直接使用できるいくつかのスタイル属性を追加しました。

attrs.xml ファイルには以下が含まれます。

<resources>
  <declare-styleable name="WeightedLayout_LayoutParams">
    <attr name="horizontalWeights" format="string" />
    <attr name="verticalWeights" format="string" />
  </declare-styleable>
</resources>

例と完全なコードは、ここで見ることができます。私が直面している問題は、ビジュアル エディターで、typedArray から文字列を取得している場所で null ポインター例外が発生し続けることです。

final TypedArray arr=context.obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
//...
final String horizontalWeights=arr.getString(R.styleable.WeightedLayout_LayoutParams_horizontalWeights);

奇妙なことは、アプリを実行すると正常に動作することです (元のスレッドで報告した奇妙なバグを除いて)。flowLayout を作成した RomainGuyのコードを変更しようとしましたが、そこでも同じ動作が発生することに気付きました。

誰か私が何をすべきか教えてもらえますか? うまくいかないのはどうしてですか?

4

2 に答える 2

2

最後に、次の Android コードを見て、答えを見つけました。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/TextView.java?av=f

テキストを取得するには、すべての属性を調べて getText を使用する必要があります。次に例を示します。

final TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
int indexCount=a.getIndexCount();
for(int i=0;i<indexCount;++i)
  {
  final int attr=a.getIndex(i);
  if(attr==R.styleable.WeightedLayout_LayoutParams_horizontalWeights)
    _textToShow=a.getText(attr);
  }
a.recycle();
于 2012-11-12T19:57:30.177 に答える
1

assign の前に TypedArray.hasValue() を確認する必要があります。

final TypedArray arr = context.obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
//...
if (arr.hasValue(R.styleable.WeightedLayout_LayoutParams_horizontalWeights)) {
final String horizontalWeights = arr.getString(R.styleable.WeightedLayout_LayoutParams_horizontalWeights);
}
于 2021-06-14T21:23:33.493 に答える