2016-11-21 2 views
1

리스트 뷰 행의 모양을 사용자 정의하는 방법되는 행 :나는 목록보기를하고 싶은

  • 하는 둥근 모서리가;
  • 은 부분적으로 채색되어 있습니다 (각 행의 왼쪽 부분).
  • 은 다른 색으로 채워진 색이 지정된 영역의 모양을 포함합니다. 나는 현재이 리드를 가지고 있지만 내가 그들 중 하나와 성공하지 못했습니다

    piano tiles 2

    : 여기

다른 응용 프로그램의 예입니다.

내 제 1 리드 (모양)

나는 모양을 사용하여 둥근 모서리를 얻고 목록보기의 배경으로 사용하는 방법을 발견했다.

드로어 블 형태의 파일 "rounded_rectangle.xml"

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 

    <corners 
     android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 

</shape> 

활동 파일 : 그러나

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    // ... 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/splitView" 
     android:id="@+id/lv_player" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/rounded_rectangle"/> 

    // ... 

</FrameLayout> 

, 내가 행이 부분적으로 색이하는 모양을 사용하는 방법을 모른다 또는 아이콘을 그립니다. 나는 색깔로 도형을 채울 수 있지만 행은 완전히 채색되어 있습니다.

내 제 2 리드 (벡터)

나는 또한 내 목록보기의 배경으로 벡터를 사용할 수 있음을 발견했다. 장점은 경로를 사용하여 원하는 것을 그릴 수 있다는 것입니다.

벡터 파일의 예 :

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:height="64dp" 
    android:width="64dp" 
    android:viewportHeight="600" 
    android:viewportWidth="600" > 

    <path 
     android:name="w" 
     android:fillColor="#000000" 
     android:pathData="m 290,103 l-200,0 c -50,0 -50,-100 0,-100 l200,0 z" 
    /> 
</vector> 

내가 쉽게 아이콘의 색 내 행의 영역과 또 다른 경로를 만들 수 있습니다. 그러나 이제 문제는 벡터의 크기를 줄 크기로 조정하는 방법을 모르겠다는 것입니다.

최상의 옵션이 무엇인지 알고 예상되는 결과를 얻으려면 어떻게해야합니까?

미리 감사드립니다.

당신이 XML 레이아웃은 사용자 정의 항목에 대한 설명이 포함되어있는 같이 별도로 공상 항목을 만드는 데 필요한 모든

답변

1

첫째 : 목록을 만들 것입니다 어댑터를 만드는 것보다

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

<TextView 
    android:id="@+id/optionName" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dp" 
    android:layout_marginStart="10dp" 
    android:layout_weight="10" 
    android:fontFamily="sans-serif-medium" 
    android:text="@string/option" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="@android:color/white" 
    android:textStyle="bold" /> 

<CheckBox 
    android:id="@+id/activated" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" /> 

는 레이아웃이 항목으로

공용 클래스 ListOptionsAdapter는 {

List<OptionsObject> Features = new ArrayList<OptionsObject>(); 
LayoutInflater inflater; 
Context context; 

public ListOptionsAdapter(List<OptionsObject> features, Context context) { 
    super(); 
    Features = features; 
    inflater = LayoutInflater.from(context); 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return Features.size(); 
} 

@Override 
public OptionsObject getItem(int position) { 
    return Features.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.item_list_view, parent, false); 
     holder = new ViewHolder(); 
     holder.optionName = (TextView) convertView.findViewById(R.id.optionName); 
     holder.isActivate = (CheckBox) convertView.findViewById(R.id.activated); 
     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 

static class ViewHolder { 
    TextView optionName; 
    CheckBox isActivate; 
} 
0 BaseAdapter를 확장

} 그 후

나는 방법의 getView (의 항목으로 사용하는 레이아웃의 이름을 지정 위와 같이)과 뷰 홀더에

NB를 모든 요소에 영향을의 getView에 당신이 있습니다 가 표시됩니다 요소에 대한 값을 지정하거나 유

난 내 목록보기를 호출 단순히 내 활동 수업 시간에 그 이후

내 어댑터를 필요가없는 경우 비워 둡니다

OptionList = (ListView) findViewById(R.id.optionList); 
adapter = new ListOptionsAdapter(Features, getApplicationContext(), this); 
OptionList.setAdapter(adapter); 
관련 문제