2015-06-19 58 views
0

我想要從左向右更改可展開列表視圖的組指示器的位置,但組指示器消失。可展開列表視圖的組指示器消失

代碼從主要活動:從組佈局

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    int width = dm.widthPixels; 

    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { 
     mExpandableListView.setIndicatorBounds(width - getDipsFromPixel(35), width 
       - getDipsFromPixel(5)); 
    } else { 
     mExpandableListView.setIndicatorBoundsRelative(width - getDipsFromPixel(35), width 
       - getDipsFromPixel(5)); 
    } 
} 

// Convert pixel to dip 
public int getDipsFromPixel(float pixels) { 
    // Get the screen's density scale 
    final float scale = getResources().getDisplayMetrics().density; 
    // Convert the dps to pixels, based on density scale 
    return (int) (pixels * scale + 0.5f); 
} 

代碼:

從activity_main
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@color/tv_menu_background_color" 
     android:paddingLeft="32dp" 
     android:minHeight="?android:attr/listPreferredItemHeightSmall" 
     android:textAppearance="?android:attr/textAppearanceListItemSmall" 
     android:textColor="@color/list_item_title" 
     android:gravity="center_vertical" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"/> 
</RelativeLayout> 

代碼:

<android.support.v4.widget.DrawerLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".MainActivity" 
       android:id="@+id/drawer_layout"> 
       <FrameLayout 
        android:id="@+id/frame_container" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/> 
       <!-- Expandable list view --> 
       <ExpandableListView 
        android:id="@+id/list_slideMenu" 
        android:layout_width="320dp" 
        android:layout_height="match_parent" 
        android:choiceMode="singleChoice" 
        android:divider="@color/list_divider" 
        android:dividerHeight="1dp" 
        android:listSelector="@drawable/list_selector" 
        android:background="@color/list_background" 
        android:layout_gravity="start"/> 
</android.support.v4.widget.DrawerLayout> 

謝謝!

回答

1

在我看來,你正在獲取屏幕的寬度並使用它來設置指標的界限。但是,你的ExpandableListView的寬度是320dp。我相信你應該計算這樣的寬度:

int width = mExpandableListView.getWidth(); 

的,這也應該都絕對不是onWindowFocusChanged被調用,因爲它可以多次調用。

相反,你應該把這個代碼放到onCreate(後setContentView):

mExpandableListView = findViewById(R.id.elv); 

mExpandableListView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, 
           int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     mExpandableListView.removeOnLayoutChangeListener(this); 

     int width = mExpandableListView.getWidth(); 

     if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { 
      mExpandableListView.setIndicatorBounds(width - getDipsFromPixel(35), width 
        - getDipsFromPixel(5)); 
     } else { 
      mExpandableListView.setIndicatorBoundsRelative(width - getDipsFromPixel(35), width 
        - getDipsFromPixel(5)); 
     } 
    } 
}); 

這增加了聽者的ELV,要等到它的測量,然後設置指標。

+0

我剛剛更改爲int width = mExpandableListView.getWidth();並修復了問題 – Vasilisfoo

+0

@Vasilisfoo幹得不錯。我強烈建議你不要使用像'onWindowFocusChanged'這樣的方法:) – Simas

+0

我確實改變了onWindowFocusChanged,我用你的建議! – Vasilisfoo