11

プログラムでFrameLayout内にビューを追加し、特定の幅と高さでレイアウト内の特定のポイントにビューを配置したいと思います。FrameLayoutはこれをサポートしていますか?そうでない場合は、これを実現するために中間のViewGroupを使用する必要がありますか?

int x; // Can be negative?
int y; // Can be negative?
int width;
int height;
View v = new View(context);
// v.setLayoutParams(?); // What do I put here?
frameLayout.addView(v);

私の最初のアイデアは、AbsoluteLayoutをFrameLayoutに追加し、ビューをAbsoluteLayout内に配置することでした。残念ながら、AbsoluteLayoutが非推奨になっていることがわかりました。

どんなポインタでも大歓迎です。ありがとう。

4

5 に答える 5

12

次の例(作業コード)は、FrameLayout内にビュー(EditText)を配置する方法を示しています。また、FrameLayoutのsetPaddingセッターを使用してEditTextの位置を設定する方法も示しています(ユーザーがFrameLayoutをクリックするたびに、EditTextの位置はクリックの位置に設定されます)。

public class TextToolTestActivity extends Activity{
    FrameLayout frmLayout;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        frmLayout = (FrameLayout)findViewById(R.id.frameLayout1);
        frmLayout.setFocusable(true);
        EditText et = new EditText(this);

        frmLayout.addView(et,100,100);
        frmLayout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("TESTING","touch x,y == " + event.getX() + "," +     event.getY() );
                frmLayout.setPadding(Math.round(event.getX()),Math.round(event.getY()) , 0, 0);
            return true;
        }
    });

}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout 
        android:id="@+id/frameLayout1" 
        android:layout_height="fill_parent" android:layout_width="fill_parent">
    </FrameLayout>

</LinearLayout>
于 2012-01-19T18:46:18.840 に答える
3

新しく追加されたビューの周囲にマージンを追加して、FrameLayout内に配置することもできます。

FrameLayout frameLayout = (FrameLayout) findViewById(R.id.main); // or some other R.id.xxx
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0, metrics.heightPixels - 20, 0, 0);
View v = new View(context);
v.setLayoutParams(params);
frameLayout.addView(v);

これにより、FrameLayoutが画面の下から20ピクセルの位置に配置されます。

編集:それが自立するように例を完成させました。そして、ああ、はい、それは機能します。

于 2014-03-25T13:11:47.350 に答える
2

FrameLayoutを使用すると、すべての子が画面の左上に固定されますが、パディングの設定をある程度制御できます。異なる子に異なるパディング値を設定すると、それらはFrameLayoutの異なる場所に表示されます。

于 2011-02-27T07:27:39.640 に答える
1

提供されたリンクQuinn1000から:

FrameLayoutに複数の子を追加できますが、すべての子は画面の左上に固定されます。

これは、ビューをFrameLayout内の特定のポイントに配置できないことを意味します(左上隅に配置する場合を除く:-))。

ビューの絶対位置が必要な場合は、AbsoluteLayoutを試してください。

子の正確な位置(x / y座標)を指定できるレイアウト。絶対レイアウトは、絶対配置のない他のタイプのレイアウトよりも柔軟性が低く、保守が困難です。

ビューの幅と高さの設定については、Quinn1000が述べたように、選択したコンテナー(AbsoluteLayout、LinearLayoutなど)に応じて、v.setLayoutParams()メソッドにLayoutParamsオブジェクトを指定します。

于 2010-10-03T12:37:54.870 に答える
0

ここにあるstackOverflowのスレッド

ImageViewのLayoutParams()をどのように設定しますか?

ややカバーしています。

例:LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30、30); yourImageView.setLayoutParams(layoutParams);

vオブジェクトのsetLayoutParamsメソッドに渡すには、LinearLayout.LayoutParams(またはこの場合はFrameLayout.layoutParams)オブジェクトを定義する必要があることを意味します。

http://developer.android.com/reference/android/widget/FrameLayout.html

それはあなたがあなたのvに次のように頼むことができるようにほとんど見えます:

パラメータを具体的に定義していない場合は、このメソッドを介してgenerateDefaultLayoutParams()。

しかし、それは遅く、それらのリンクは私の目を少し出血させています。彼らが何か助けてくれたら教えてください:-)

于 2010-10-03T12:22:12.590 に答える