2016-04-11 10 views
1

どのようにアイテム全体ではなく、ドロップダウン全体にボーダーを設定しますか?スピナードロップダウンの外側の境界

期待

おそらく、そのないはっきりと見えるが、私は全体のドロップダウンリスト外の白のボーダーに興味があります。

enter image description here

spinner_item.xml:

enter image description here

リアリティ赤いノートを参照してください

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/primary_blue_dark"> 

    <TextView 
     android:id="@+id/tv_spinner_item" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="12dp" 
     android:gravity="center_vertical|start" 
     style="@style/sp_squared_style"/> 

    <ImageView 
     android:id="@+id/iv_underline" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="12dp" 
     android:layout_marginLeft="12dp" 
     android:layout_marginBottom="6dp" 
     android:background="@drawable/ic_underline"/> 
</LinearLayout> 
+0

レイアウトは、あなたが望むとおりにです。あなたは白い線であるイメージビューを持っています。垂直マージンを小さくしたい場合は、それを減らしてください。 –

+0

私は期待を明確にするためにスクリーンショットを編集しました。赤く塗ってある国境を見てください – AnZ

+0

ポップアップテーマを見てくださいhttp://stackoverflow.com/questions/33222207/how-to-add-padding-to-drop-down-list-that-weget-by-by-クリックスピード –

答えて

1

は、このための回避策を見つけました。確かに、おそらく良い解決策があります。とにかく: - :)

public class AmountAdapter extends ArrayAdapter<String> { 

private TextView tvRow; 
private TextView tvItem; 
private LinearLayout llWrapper; 
private Context context; 
private ImageView ivUnderline; 
private String[] values; 

private int border; 


public AmountAdapter(Context context, int textViewResourceId, 
         String[] values) { 
    super(context, textViewResourceId, values); 
    this.context = context; 
    this.values = values; 
    border = (int) context.getResources().getDimension(R.dimen.rounding_radius_dp_1); 
} 

public int getCount() { 
    return values.length; 
} 

public String getItem(int position) { 
    return values[position]; 
} 

public String[] getItems() { 
    return values; 
} 


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

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

    LayoutInflater inflater = LayoutInflater.from(context); 
    View row; 

    row = inflater.inflate(R.layout.item_spinner_row, parent, false); 
    tvRow = (TextView) row.findViewById(R.id.tv_spinner_row); 
    return row; 
} 

@Override 
public View getDropDownView(final int position, View convertView, 
          ViewGroup parent) { 
    View row; 

    row = View.inflate(context, R.layout.item_spinner_dropdown, null); 
    llWrapper = (LinearLayout) row.findViewById(R.id.ll_wrapper); 
    tvItem = (TextView) row.findViewById(R.id.tv_spinner_item); 
    tvItem.setText(values[position]); 

    ivUnderline = (ImageView) row.findViewById(R.id.iv_underline); 

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT 
    ); 


    if (position == values.length - 1){ 
     ivUnderline.setVisibility(View.GONE); 
     int padding = (int)context.getResources().getDimension(R.dimen.activity_vertical_margin_small); 
     int paddingTop = (int)context.getResources().getDimension(R.dimen.rounding_radius_dp); 
     tvItem.setPadding(padding, paddingTop, 0, padding); 

     params.setMargins(border, 0, border, border); //end part 
     llWrapper.setLayoutParams(params); 
    } else if(position == 0){ 
     params.setMargins(border, border, border, 0); //start part 
     llWrapper.setLayoutParams(params); 
    } else { 
     params.setMargins(border, 0, border, 0); //middle part 
     llWrapper.setLayoutParams(params); 
    } 

    return row; 
} 
} 

1)spinner_item.xml最初の要素およびボトムアダプタ内の1つのためのマージン底を追加)レイアウト

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/grey_stroke" //add white border 
> 

<LinearLayout 
    android:id="@+id/ll_wrapper" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="1dp" //set margin left and right 
    android:layout_marginRight="1dp" //add bottom and top margins dynamically in adapter 
    android:orientation="vertical" 
    android:background="@color/primary_blue_dark"> 
    <TextView 
     android:id="@+id/tv_spinner_item" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="@dimen/activity_vertical_margin_small" 
     android:gravity="center_vertical|start" 
     style="@style/sp_squared_style"/> 

    <ImageView 
     android:id="@+id/iv_underline" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="@dimen/activity_vertical_margin_small" 
     android:layout_marginLeft="@dimen/activity_vertical_margin_small" 
     android:layout_marginBottom="6dp" 
     android:background="@drawable/ic_underline"/> 
</LinearLayout> 

2のコンテンツをラップ結果:

enter image description here

0

は下1 border.xmlファイルを作成しますDrawableのフォルダに移動し、次のコードを記述します。

スピナーにそのセットの背景の後
<?xml version="1.0" encoding="utf-8"?> 

<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="@color/edittext_line_color" /> 
    </shape> 
</item> 
<item 
    android:bottom="1dp" 
    android:left="1dp" 
    android:right="1dp" 
    android:top="1dp"> 
    <shape android:shape="rectangle" > 
     <solid android:color="@color/app_screen_back_color" /> 
    </shape> 
</item> 

のような、

android:background="@drawable/border.xml" 

私は...それはあなたを助けることを願って:)

+0

すべてのドロップダウンアイテムの境界線を作成し、それらのアイテムの「親」ホルダの境界に興味がある – AnZ

+0

あなたのスピナーアイテムと同じコードを試してください –

1

あなたが必要drawabl内に別のXMLファイルを作成する電子フォルダ

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/white_overlay_8x" /> 
    <corners android:radius="6dip" /> 
    <stroke 
     android:color="@color/white" 
     android:width="@dimen/dot" /> 

</shape> 

とあなたのspinner_item.xmlで

android:[email protected]/file; 

を設定します。

0

Ben-Jコメントとhttp://stackoverflow.com/questions/33222207/how-to-add-padding-to-drop-down-list-that-we-get-by-clicking-on-spinner回答のおかげで、このコードを使用してThemeOverlay.AppCompat.Lightサブスタイルを使用して枠線を作成しました。

これにより、外側のリストオーバーレイのパディングが作成され、下位のオーバーレイバックグラウンドが表示されます。また、透明にならないようにリストアイテムの明示的な背景を設定する必要があります。

レイアウト/ main_layout.xml:

<Spinner xmlns:app="http://schemas.android.com/apk/res-auto" 
    app:popupTheme="@style/LangList_SpinnerPopupOverlay" /> 

値/のstyles.xml:

<style name="LangList_SpinnerPopupOverlay" parent="ThemeOverlay.AppCompat.Light"> 
    <!-- border width --> 
    <item name="android:padding">1dp</item> 
    <!-- border color --> 
    <item name="android:background">#f00</item> 
</style> 

レイアウト/ spinner_list_item.xml:

<LinearLayout 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/itemText" 
    android:background="#fff"/> 
</LinearLayout> 

レイアウト/ spinner_view.xml:

<LinearLayout 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/itemText"/> 
</LinearLayout> 

CustomListAdapter.java:

import java.util.List; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class CustomListAdapter extends ArrayAdapter<CustomListItem> { 

    private Context context; 

    public CustomListAdapter(Context context, List<CustomListItem> items) { 
    super(context, R.layout.spinner_list_item, items); 
    this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    // spinner layout (when closed) 
    int layoutId = R.layout.spinner_view; 
    return createView(position, convertView, parent, layoutId); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    // dropdown list layout 
    int layoutId = R.layout.spinner_list_item; 
    return createView(position, convertView, parent, layoutId); 
    } 

    private View createView(int position, View convertView, ViewGroup parent, int layoutId) { 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(layoutId, null); 
    } 

    TextView itemText = convertView.findViewById(R.id.itemText); 

    CustomListItem item = getItem(position); 
    if (item != null) { 
     itemText.setText(item.getText()); 
    } 

    return convertView; 
    } 

} 

https://i.imgur.com/SKAW0Vw.png

関連する問題