2016-11-16 8 views
1

私は、RelativeLayout内にLinearLayoutを配置し、値に応じて右または左に配置したい(単純なチャットです。私が話している人)、これはレイアウトコードです:あなたはandroid:layout_alignParentRight="true"プロパティが設定されて見ることができるように右に配置する/左に配置するプログラムでは、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> 

問題は、私は右または左にそれらを設定するLayoutParamsへのアクセスを取得しようとすると、プログラムで、それはキャスト例外をスローし、次のとおりです。

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 

は、これは私がLayoutParamsにアクセスする方法です。

 mChatMessageContainer = (View) v.findViewById(R.id.layout_chat_message); 

最近ありませんでした:mChatMessageContainerがある

  RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.mChatMessageContainer.getLayoutParams(); 
      params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

LinearLayoutの代わりにTextLayoutを使用していましたが、コードが正常に動作していましたが、現在は必要です。

ドキュメントを読んで、私は親レイアウトのparamsにアクセスしていたと思います。そのため、私はそれを相対パスにキャストしています。

どのようにして整列をTHAT linearLayoutにプログラムで設定できますか?

答えて

0

In LayoutParamsでは、RelativeLayoutの代わりに親ビューLinearLayoutを使用します。

使用

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

代わりの

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

をしかし'LinearLayout.LayoutParams'doesは私が必要'RelativeLayout.ALIGN_PARENT_RIGHT'propertyを追加するための追加ルールを持っていません。もちろん、相対レイアウトのプロパティを追加することはできません。 –

+0

親ビューをRelativeLayout – sasikumar

+0

のように変更します。親ビューは既に相対レイアウトです。 –

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

にキャストできません。親レイアウトがRelativeの場合、LinearLayoutの代わりに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); 
関連する問題