Как установить гравитацию программно в режиме релятивирования
Как установить гравитацию в программировании в режиме релятивирования. У меня есть XML-макет с именем chat_viewer_message.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;
}
См. гравитацию при relativelayout с id = фон, значение по умолчанию - LEFT, поэтому я хочу, чтобы при входе значение силы тяжести при относительной вероятности было ПРАВИЛЬНО вместо LEFT.
Спасибо.
Ответы
Ответ 1
Вставьте 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 учитывает расположение каждого дочернего элемента относительно друг друга, чтобы быть значительными, установка силы тяжести повлияет позиционирование всех детей как единое целое внутри родителя. Это происходит после того, как дети были относительно расположены.
Ответ 2
Существует два основных способа программной установки силы тяжести в RelativeLayout
. Вы можете установить гравитацию для всех дочерних видов (setGravity(int)
) или установить гравитацию индивидуально (params.addRule(int)
). Примечание. Эти методы недоступны для LinearLayout
s.
Чтобы установить гравитацию для всех детей:
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);
Источники:
Ответ 3
Он отлично работает для моего случая:
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);
Ответ 4
Вы можете использовать:
RelativeLayout.LayoutParams paramas = new RelativeLayout.LayoutParams();
params.gravity = Gravity.RIGHT;
view.setLayoutParams(params);
Для получения дополнительной информации о параметрах силы тяжести u можете проверить это: Gravity
Ответ 5
Использовать метод setGravity (int)
http://developer.android.com/reference/android/widget/RelativeLayout.html#setGravity(int)
Это лучший способ установить вес ребенка с помощью RelativeLayout.LayoutParams.
Видеть это.
Как программно установить атрибут layout_align_parent_right кнопки в относительной компоновке?
Ответ 6
Создание макета чата и его программное управление и amp;
sDirectionHasmap содержит направление каждого сообщения.
if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) {
holder.messageLayout.setGravity(Gravity.LEFT);
} else {
holder.messageLayout.setGravity(Gravity.RIGHT);
}