19

相対レイアウトでプログラミングで重力を設定する方法。以下のように、 chat_viewer_message.xmlという名前の XML レイアウトがあります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/background"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingRight="4dip"
    android:paddingBottom="4dip"
    android:gravity="left"
    android:background="@drawable/chat_bg_in">

    <ImageView
        android:id="@+id/avatar"
        android:layout_width="32dip"
        android:layout_height="32dip"
        android:layout_marginLeft="4dip"
        android:src="@drawable/avatar_1_1"
        />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/avatar"
        android:paddingLeft="4dip"
        />

</RelativeLayout>

また、プログラミングでのコード ビューは次のとおりです。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final int type = getItemViewType(position);
        final View view;
        if (convertView == null) {
            final int resource = R.layout.chat_viewer_message;
            view = activity.getLayoutInflater()
                    .inflate(resource, parent, false);
            if (type == TYPE_MESSAGE)
                ((TextView) view.findViewById(R.id.text)).setTextAppearance(
                        activity, appearanceStyle);
        } else
            view = convertView;



        final MessageItem messageItem = (MessageItem) getItem(position);
        String name;
        final String account = messageItem.getChat().getAccount();
        final String user = messageItem.getChat().getUser();
        final String resource = messageItem.getResource();
        final boolean incoming = messageItem.isIncoming();
        final String server_host = view.getResources().getString(
                R.string.server_host);
        if (isMUC) {
            name = resource;
        } 


        if (incoming) {
            view.setBackgroundResource(R.drawable.chat_bg_in);
        } else {
            // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS
            view.setBackgroundResource(R.drawable.chat_bg_out);
        }

        return view;
}

id = background の relativelayout で重力を参照してください。デフォルトの重力は LEFT です。したがって、relativelayout での値の重力が !incoming の場合、LEFT ではなく RIGHT にする必要があります。

ありがとう。

4

6 に答える 6

27

viewコンテナー レイアウト (この場合は ) にキャストし、その上でRelativeLayout使用setGravity(int)します。

if (incoming) {
    view.setBackgroundResource(R.drawable.chat_bg_in);
} else {
    // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS
    view.setBackgroundResource(R.drawable.chat_bg_out);

    ((RelativeLayout) view).setGravity(Gravity.RIGHT);
}

注意事項(ドキュメントから):

RelativeLayout では、各子の相対的な配置が重要であると見なされるため、重力を設定すると、親内の単一ユニットとしてすべての子の配置に影響することに注意してください。これは、子供が相対的に配置された後に発生します。

于 2013-09-02T08:12:54.390 に答える
15

で重力をプログラムで設定するには、主に 2 つの方法がありますRelativeLayout。すべての子ビューの重力を設定するか ( setGravity(int))、個別に重力を設定できます ( params.addRule(int))。注: これらのメソッドはLinearLayouts では使用できません。

すべての子の重力を設定するには:

RelativeLayout relativeLayout = findViewById(R.id.myRelativeLaout);
relativeLayout.setGravity(Gravity.CENTER);

内の単一のビューの重力を設定するにはRelativeLayout:

MyView myView = findViewById(R.id.myView);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
myView.setLayoutParams(params);

ソース:

于 2014-11-25T20:36:20.880 に答える
7

私の場合は完全に機能します:

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);

    layoutParams.topMargin = 700;//in my case
    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);//in my case
    varButton.setLayoutParams(layoutParams);
于 2016-02-06T12:37:53.463 に答える
0

以下を使用できます。

RelativeLayout.LayoutParams paramas = new RelativeLayout.LayoutParams();
params.gravity = Gravity.RIGHT;
view.setLayoutParams(params);

重力パラメータの詳細については、これを確認できます: Gravity

于 2013-09-02T08:09:12.613 に答える
0

チャット レイアウトを構築し、プログラムで操作する & sDirectionHasmap には、各メッセージの方向が含まれます。

if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) {
            holder.messageLayout.setGravity(Gravity.LEFT);
        } else {
            holder.messageLayout.setGravity(Gravity.RIGHT);
        }
于 2016-02-25T13:36:39.980 に答える