2016-11-16 54 views
1

我有一個RelativeLayout的內部的LinearLayout,我想將其調整到左邊或右邊取決於一個值(它是一個簡單的聊天,左邊是自己,右邊是我是誰說話)的人,這就是佈局代碼:對準左/右一個的RelativeLayout內的LinearLayout編程

 <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),但我現在確實需要一個。

讀取DOC,我認爲我在訪問父佈局PARAMS,這就是爲什麼我把它轉換爲相對的,因爲如果我改變線性我也有同樣的異常。

如何設置對齊到的LinearLayout編程?

回答

0

在使用的LayoutParams父視圖的LinearLayout代替RelativeLayout的。

使用

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.mChatMessageContainer.getLayoutParams(); 

,而不是

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.mChatMessageContainer.getLayoutParams(); 
+0

但'LinearLayout.LayoutParams'does沒有一個addRule添加'RelativeLayout.ALIGN_PARENT_RIGHT'property我所需要的。當然,我不能添加相對佈局的屬性。 –

+0

然後改變你的父視圖的RelativeLayout – sasikumar

+0

父視圖已經是一個RelativeLayout的。 –

1

試試這個:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
      params.setMargins(50,0,0,0); 
      params.gravity = Gravity.RIGHT; 
      holder.comment_layout.setLayoutParams(params); 
      holder.comment_layout.setPadding(dipToPixels(mContext, 5), dipToPixels(mContext, 5), dipToPixels(mContext, 18), dipToPixels(mContext, 5)); 

dipToPixels方法:

public static int dipToPixels(Context context, float dipValue) { 
     DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
     int px =(int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics)); 

     return px; 
    } 
+0

它拋出一個異常:java.lang.ClassCastException:android.widget.LinearLayout $的LayoutParams不能轉換到android.widget.RelativeLayout $的LayoutParams –

+0

如果你的父母佈局相對再使用的,而不是LinearLayout.I的RelativeLayout已經編輯我的答案。 – Nidhi

0

試試這個:

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    relativeParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT //or left ,depends your value); 
    holder.mChatMessageContainer.getChildAt(0).setLayoutParams(relativeParams); 
相關問題