2

を拡張するカスタム ビューを作成しましたRelativeLayout。デザイナーでどのように表示されるかをプレビューしたいと思います。

Javaは次のようなものです:

// The view for a snap in the search/browse fragment.
public class MyView extends RelativeLayout
{
    public MyView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        LayoutInflater inflater = LayoutInflater.from(context);
        inflater.inflate(R.layout.the_layout, this);
    }

    public void setData(String text)
    {
        mText.setText(text);
    }

    // *** Views ***
    private TextView mText;

    @Override
    protected void onFinishInflate()
    {
        super.onFinishInflate();

        mText = (TextView)findViewById(R.id.text);
    }
}

XML は次のようになります。

<?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" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <!-- (And lots more views) -->
</RelativeLayout>

ただし、これにはいくつかの問題があります。

  1. これは実際には無意味なRelativeLayout内にを作成します。RelativeLayoutXML<RelativeLayout>を に変更することで解決できます<merge>が、レイアウトをまったくプレビューできません!
  2. Java で関数 (またはそれが呼び出されたもの)を使用してisInEditor()、プレビュー用のサンプル データを追加したいのですが、XML エディターに、クラスの代わりにクラスのプレビューを表示するように指示する方法が見つかりません。実際の XML。

私が考えることができる1つの不満な解決策は、その中preview.xmlにのみ空のファイルを作成する<com.foo.bar.MyView/>ことです...しかし、それはちょっとばかげているようです。より良い方法はありますか?(プレビューほど編集についてはあまり気にしません。というのは、正直に言うと、Eclipse/ADT は遅すぎて不安定なので、グラフィカル レイアウトの編集を使用可能にすることはできません。)

4

1 に答える 1

1

私があなたの問題を正しく理解していれば、解決策は、xmlレイアウトの「RelativeLayout」タグ(またはその他のタグ)を次のように「your.packagename.MyView」に置き換えることです。

<your.packagename.MyView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <!-- (And lots more views) -->

</your.packagename.MyView>

アプリの実行中にMyViewクラスに関する例外が発生する場合は、不足しているすべてのスーパー/親コンストラクターを追加します。

これは、ほとんどすべてのカスタムxmlレイアウトに対して行います。RelativeLayout、LinearLayout、またはその他のGUIクラスを使用してクラスを拡張すると、GUIの動作を細かく制御することもできます(親メソッドなどをオーバーライドすることもできるため)。

于 2013-02-22T15:40:42.053 に答える