2015-05-11 64 views
2

我試圖以編程方式對齊另一個線性佈局內的線性佈局,但setGravity(Gravity.RIGHT)不起作用。想要在另一個內部對齊linearlayout,但setGravity()不起作用

我知道gravitylayout_gravity之間的區別。

這裏的XML:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<LinearLayout 
    android:id="@+id/initial_wrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 

    <LinearLayout 
     android:id="@+id/conversationwrapper" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/bubble_yellow" 
     > 

     <TextView 
      android:id="@+id/messagecontent_tv" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_margin="5dip" 
      android:paddingLeft="10dip" 
      android:text="Message_content" 
      android:textSize="15dp" /> 
     <TextView 
      android:id="@+id/timestamp_tv" 
      android:layout_width="50dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:text="HH:MM" 
      android:ems="2" 
      android:textSize="12dp" /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

而且getView在我的適配器代碼():

public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.listitem_conversation, parent, false); 
    } 
    wrapper = (LinearLayout) row.findViewById(R.id.conversationwrapper); 
    initial_wrapper = (LinearLayout) row.findViewById(R.id.initial_wrapper); 
    time = (TextView) row.findViewById(R.id.timestamp_tv); 

    Message coment = getItem(position); 

    content = (TextView)row.findViewById(R.id.messagecontent_tv); 


    content.setText(coment.content); 
    time.setText(getCurrentTimeStamp()); 

    wrapper.setBackgroundResource(!coment.mine ? R.drawable.bubble_yellow :  R.drawable.bubble_green); 
    initial_wrapper.setGravity(!coment.mine ? Gravity.LEFT : Gravity.RIGHT); 


    return row; 
} 

但它總是發生在左邊,即使圖像是綠色的。

奇怪的是,如果我鍵入

android:gravity="right" 

內initial_wrapper,它的工作原理在預覽但不是在裝置。

我使用的是摩托G和一臺Nexus 5,但他們都沒有工作

+0

不相關,您在線性佈局中缺少方向標籤。 – Skynet

+0

@Skynet當沒有方向被視爲水平 – Elltz

+0

謝謝Elltz :) – Skynet

回答

0

的問題都可以在這裏:android:layout_width="fill_parent",你怎麼supose設置android:gravity="right"這裏,如果你的佈局填充整個父?你應該嘗試使用

<LinearLayout 
    android:id="@+id/initial_wrapper" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    > 

代替:

<LinearLayout 
    android:id="@+id/initial_wrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 
+0

「重力」總是適用於內容(當佈局最大化時有意義Wrt維度匹配或固定大小),而layout_gravity適用於佈局(你需要wrap_content或固定的大小,這是有道理的)。 OP是在分配重力 – humblerookie

+1

@humblerookie的方式是正確的,但在這段代碼中,這個內容__填充整個parent__,所以我認爲他需要試試這個 –

+0

@nikmyers我首先嚐試了這個,但是我也讀了layout_gravity和重力,這是我想要的重力 –

0

getView()做到這一點

<LinearLayout 
android:id="@+id/initial_wrapper" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity = "left" 
> 

做到這一點

LinearLayout.LayoutParams lp = initial_wrapper.getLayoutParams();//will need to casting 
lp.gravity= Gravity.RIGHT; // this is the important part 
initial_wrapper.setLayoutParams(lp); 

希望它有助於

+0

我試過了,但沒有奏效。將initial_wrapper寬度更改爲wrap_content,並且它甚至在編輯器中無法正確顯示:/但謝謝! –

+0

對不起對不起對不起先生,我犯了一個小錯誤檢查我的編輯。@ JavierLunaMolina – Elltz

+0

它崩潰:java.lang.ClassCastException:android.widget.AbsListView $ LayoutParams不能轉換爲android.widget.LinearLayout $ LayoutParams –

相關問題