У меня есть LinearLayout внутри RelativeLayout, и я хочу выровнять его вправо или влево в зависимости от значения (это простой чат, слева - собственный, справа - человек, который я говорю), это код макета:Выравнивание вправо/влево LinearLayout внутри RelativeLayout программно
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/layout_chat_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/chat_margin_default"
android:paddingRight="@dimen/chat_margin_default"
android:layout_alignParentRight="true"
android:background="@drawable/textview_rounded_corners_receiver"
android:orientation="vertical">
<TextView
android:id="@+id/textview_chat_message_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:autoLink="all"
android:text="Se"/>
<TextView
android:id="@+id/textview_chat_message_date_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="false"
android:textAlignment="textEnd"
android:text="10:32"
android:maxLines="1"
android:textSize="@dimen/chat_message_text_font_size"/>
</LinearLayout>
</RelativeLayout>
Как вы можете видеть android:layout_alignParentRight="true"
свойство установлено.
Проблема заключается в том, когда я пытаюсь получить доступ к LayoutParams, чтобы установить их вправо или влево, программным, он бросает исключение произнесения:
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Это, как я получить доступ к LayoutParams:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.mChatMessageContainer.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
Где mChatMessageContainer является:
mChatMessageContainer = (View) v.findViewById(R.id.layout_chat_message);
в последнее время не было ny linearLayout внутри относительной, и код работал нормально (я использовал TextView вместо LinearLayout), но мне это нужно сейчас.
Чтение документа, я предположил, что я обращаюсь к родительским параметрам макета, поэтому я отнес его к относительному, потому что, если я перейду на Linear, у меня будет такое же исключение.
Как можно настроить выравнивание с помощью этого метода linearLayout?
Но'LinearLayout.LayoutParams'does нет addRule, чтобы добавить'RelativeLayout.ALIGN_PARENT_RIGHT'property мне нужно. И, конечно, я не могу добавить свойство Relative Layout. –
затем измените родительское представление как RelativeLayout – sasikumar
Родительский просмотр уже является RelativeLayout. –