2016-02-18 11 views
6

私はAppWidgetのいくつかの非常によく似たレイアウトを持っていますが、実際にはTextView要素の1つの回転だけが異なります(スクリーンの向きに基づいて適切なレイアウトを選択します)。AppWidgetの場合のレイアウトの再利用

同じものを何度も繰り返すのではなく(私は繰り返しが嫌いです)、私はRe-using Layouts with <include/>で試してみると思います。

問題は、レイアウトの特定の要素をIDで参照しようとしているときに発生します。

:私はメソッドを使用しました -AppWidgetレイアウトは「親」レイアウトでは2階層のアプローチが使用されている here、...

を説明するための要素は、含まれるレイアウトXMLである場合

TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview); 
tv.setText("test"); 

... "子" レイアウトでTextViewのIDがtextviewです:コードで

<include layout="@layout/my_layout" android:id="@+id/textview_layout" /> 

。だから、あなたが最初にTextViewを含むViewを参照してから、TextViewを参照するという2段階のアプローチです。

しかし、AppWidgetsでは、TextViewを直接処理するのではなく、RemoteViewsですべてを実行する必要があります。

ので、代わりの:

TextView textView = (TextView)findViewById(viewId); 
textView.setText("text"); 

あなたがする必要があります:RemoteViewsへのインタフェースは、単一の(直接)、ビューIDを渡すことによるものであることを考えると

remoteViews.setTextViewText(viewId, "text"); 
appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 

、どのようにインクルードされたファイルの要素を参照しますか?

答えて

0

あなたの意見は構成の変更によってのみ異なります。 GUI設計ツールでAndroidスタジオを使用している場合、というオプションがあります。に移動し、のレイアウト - 土地ファイルを生成し、必要に応じて設定してください。 idはアンドロイドとしてどのレイアウトを使用するかを決定するので、同じIDでTextViewにアクセスすることができます。インクルードタグにあるビューにアクセスしたい場合。あなたは彼らに与えたidを使うことができます。これが参考になることを願っています。ありがとうございました

+0

ありがとうございます。私は、画面の向きに基づいて、適切なレイアウトをOSが自動的に選択できるようにすることを前提としていますか?残念ながら、私の場合、それはあまり簡単ではない。私はウィジェットのサイズに基づいて異なるレイアウトを切り替える必要があります(ウィジェットの高さが狭く、レイアウトが狭くなった場合はユーザーオプションとして回転させます)。 – drmrbrewer

+0

それはあなたがそれをプログラム的に設定できる場合は簡単です、チュートリアルをチェックしてください。私は思っているあなたの突き刺しのために良い断片を使うこともできます。ありがとうございました – Jois

関連する問題