web-dev-qa-db-ja.com

Android:プログラムで表示するボタンを追加する方法

私のAndroidアクティビティでは、SurfaceViewを拡張するカスタムビューを作成します(MonoDroidを使用しているため、構文がわずかに異なります)。

class FriendsView : SurfaceView
{
    ...

    public FriendsView(Context context) : base(context)
    {

        ... create my custom view ...

    }


}

アクティビティクラスで、コンテンツビューを次のビューに設定します。

protected override void OnCreate(Bundle bundle)
{

    base.OnCreate(bundle);

    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent);

    FriendsView friendsView = new FriendsView(this);

    SetContentView(friendsView, layoutParams);

}

ビューにボタンを追加したいのですが、その方法がわかりません。私が読んだものはすべてmain.xmlの観点から始まりますが、これを使用して自分のビューに表示されるボタンを宣言する方法がわかりません。同様に、プログラムでButtonオブジェクトを追加できるActivityクラスとViewクラスのどちらにもメソッドが見つかりません。

概念的に何かが欠けていると思いますが、正しい方向に進むための助けを歓迎します。

7
user304582

私が正しく理解していれば、friendsViewは問題なく表示されますが、ボタンを追加したいですか? FriendsViewがどのようなビューであるかはわかりませんが、子を追加できるもの(linearLayoutなど)であると仮定すると、(頭のてっぺんから)これを実行できるはずです。

_ //assuming you have a friendsView object that is some sort of Layout.
 Button yourButton = new ImageButton(this);
 //do stuff like add text and listeners.

 friendsView.addView(yourButton);
_

子を追加したい他の要素がfriendsViewにある場合は、findViewById()を使用して見つけることができます(このように要素を見つけたい場合は、要素にIDを追加してください)

13
Nanne

SurfaceViewは子を持つことができず、ViewGroupに基づくビューのみが子を持つことができます(LinearLayout、RelativeLayout、...)ContentView()にLinearLayoutを使用するか、RelativeLayoutを使用する必要があると思います(ボタンを「内側」にする必要がある場合) 「SurfaceView)。 LinearLayoutの場合、レイアウトの方向(setOrientation())に注意する必要があります。RelativeLayoutの場合、RelativeLayout内の子の相対座標/位置を定義する子のLayoutParamsに特別な注意を払う必要があります。

すべてをXMLから膨らませるとよいでしょう。 XMLファイルで完全なクラス名を使用して、「独自の」ビューを拡張することもできます。基本的に、ContentViewを自分で作成する必要はありません。

5
Oliver