0

Wellcome 모두ExpandableListView를 사용하는 방법?

나는 ExpanableListView를 테스트 중입니다. 항목의 펼치기 아이콘에 문제가 있습니다. 아이콘이 각 항목의 텍스트 제목 위에 겹쳐서 그려집니다. 예를 들어 첫 번째 아이템의 제목이 "Ducados"이고 아이콘이 "Du"이고 "cados"만 보이는 경우

확장 오른쪽에있는 텍스트를 정렬하려면 어떻게해야합니까? 상?

public class MainActivity extends ExpandableListActivity { 
ExpandableListAdapter mAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Set up our adapter 
    mAdapter = new MyExpandableListAdapter(); 
    setListAdapter(mAdapter); 
    registerForContextMenu(getExpandableListView()); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    menu.setHeaderTitle("Sample menu"); 
    menu.add(0, 0, 0, "Sample action"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 

    String title = ((TextView) info.targetView).getText().toString(); 

    int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
     Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos, Toast.LENGTH_SHORT).show(); 
     return true; 
    } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return false; 
} 

public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
    // Sample data set. children[i] contains the children (String[]) for groups[i]. 
    private String[] groups = { "Names", "Designation", "Gender", "Company" }; 
    private String[][] children = { 
      { "abc", "xyz", "ash", "anu" }, 
      { "SSE", "TJ", "PM", "SE" }, 
      { "Male", "Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female Female " }, 
      { "yyyyyy", "xxxxx" } 
    }; 

    public Object getChild(int groupPosition, int childPosition) { 
     return children[groupPosition][childPosition]; 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    public int getChildrenCount(int groupPosition) { 
     return children[groupPosition].length; 
    } 

    public TextView getGenericView() { 
     // Layout parameters for the ExpandableListView 
     AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

     TextView textView = new TextView(MainActivity.this); 
     textView.setLayoutParams(lp); 
     textView.setTextSize(20); 
     // Center the text vertically 
     textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
     return textView; 
    } 

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
     TextView textView = getGenericView(); 
     textView.setText(getChild(groupPosition, childPosition).toString()); 
     textView.setTextSize(15); 
     return textView; 
    } 

    public Object getGroup(int groupPosition) { 
     return groups[groupPosition]; 
    } 

    public int getGroupCount() { 
     return groups.length; 
    } 

    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     TextView textView = getGenericView(); 
     textView.setText(getGroup(groupPosition).toString()); 
     return textView; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

    public boolean hasStableIds() { 
     return true; 
    } 
} 
} 

감사

답변

1

난 내 자신의 애플 리케이션 중 하나에 유사한 문제로 실행 기억 :

는 코드입니다.

getGenericView 방법에서는 TextView.setPadding을 사용하여 텍스트의 왼쪽 패딩을 지정하여 텍스트가 오른쪽에 더 많이 나타나도록하고 아이콘이 겹치지 않도록 할 수 있습니다. 이 메서드는 패딩을 픽셀 (화면 밀도에 따라 다름)로 설정하므로 패딩 및 모양이 화면에서 표준화되도록 density-independent pixels으로 픽셀을 변환하는 것이 중요합니다. 앱 전반에 걸쳐 여러 ExpandableListViews이있는 경우

public TextView getGenericView() { 
    // Padding values (in pixels) 
    int left = 36; // to avoid being overlapped by the icon 
    int right = 0; // not needed 
    int top = 15; // space out the list a bit more 
    int bottom = top; // space out the list a bit more 

    // Get density of screen to convert px to dp 
    float scale = m_Context.getResources().getDisplayMetrics().density; 

    // Layout parameters for the ExpandableListView 
    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

    TextView textView = new TextView(MyActivity.this); 
    textView.setLayoutParams(lp); 
    // Center the text vertically 
    textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
    // Set the text starting position 
    textView.setPadding((int)(left * scale), (int)(top * scale), right, (int)(bottom * scale)); // left, top, right, bottom 
    textView.setTextSize(20); 
    return textView; 
} 

, 당신의 응용 프로그램 자원 (고해상도/값의 픽셀 크기를 지정하는 것이 더있을 수 있습니다 : 여기

내 자신의 코드에서 방법의 전체 예제 /dimen.xml)을 사용하여 getGenericView의 맨 위에 표시되므로 한 곳에서 정의되고 변경할 수 있으며 모든 목록에서 참조 할 수 있습니다.

희망이 도움이됩니다.

+0

나는 그것을 시험해 보았지만 일부 대형 스크린 전화기에서는 채우기가 불충분합니다. 그리고 많은 패딩을 넣으면 텍스트가 작은 화면 해상도의 휴대폰에서 오른쪽으로 많이 보입니다. 존재하지 않는 더 나은 해결책이 있습니까? – NullPointerException

+0

흠, 흥미 롭습니다. 나도 이상하게 여기는 더 이상 내장 된 방법이 없어 (그리고 나는 거기에 있는지 알고 싶다.). 어떤 대형 스크린과 소형 스크린을 테스트하고 있습니까? 아마도 화면 밀도 이외에 더 많은 것이 관련되어있을 것입니다. – Aaron