【问题标题】:Grid view Item click color change网格视图项目点击颜色变化
【发布时间】:2018-01-16 19:30:15
【问题描述】:

我在需要排序的活动中有一个网格我写了排序逻辑这里是我的代码。 但问题是当我试图点击任何网格项目时。项目的背景没有改变有没有办法改变项目的背景

    HashMap<String, Integer> map = new HashMap<String, Integer>();
    ValueComparator bvc = new ValueComparator(map);
    TreeMap<String, Integer> sorted_map = new TreeMap<String, Integer>(bvc);

    map.put("Windows", sharedPref.getInt("Windows", 0));
    map.put("iOS", sharedPref.getInt("iOS", 0));
    map.put("Android", sharedPref.getInt("Android", 0));
    map.put("Blackberry", sharedPref.getInt("Blackberry", 0));
    map.put("Java", sharedPref.getInt("Java", 0));
    map.put("JQuery", sharedPref.getInt("JQuery", 0));
    map.put("Phonegap", sharedPref.getInt("Phonegap", 0));
    map.put("SQLite", sharedPref.getInt("SQLite", 0));
    map.put("Thread", sharedPref.getInt("Thread", 0));
    map.put("Video", sharedPref.getInt("Video", 0));
    sorted_map.putAll(map);

    iconList = new ArrayList<Integer>();
    Map<String, Integer> treeMap = new TreeMap<String, Integer>(sorted_map);

    for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
    System.out.println("Key : " + entry.getKey() 
                                      + " Value : " + entry.getValue());


    sortedList.add(entry.getKey());

    }
    package info.payism.onlineservice;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomGridAdapter extends BaseAdapter {

private Context context;
private final String[] gridValues;
ImageView imageView;

// Constructor to initialize values
public CustomGridAdapter(Context context, String[] gridValues) {
    this.context = context;
    this.gridValues = gridValues;
}

@Override
public int getCount() {

    // Number of times getView method call depends upon gridValues.length
    return gridValues.length;
}

@Override
public Object getItem(int position) {

    return null;
}

@Override
public long getItemId(int position) {

    return 0;
}

// Number of times getView method call depends upon gridValues.length

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

    // LayoutInflator to call external grid_item.xml file

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from grid_item.xml
        gridView = inflater.inflate(R.layout.grid_item, null);

        imageView= (ImageView) gridView.findViewById(R.id.grid_item_image);
        imageView.setBackgroundColor(Color.parseColor("#ffffff"));

        // set value into textview
        Typeface font = Typeface.createFromAsset(context.getAssets(),
                "fonts/gotham-book-1361523257.ttf");
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setBackgroundColor(Color.parseColor("#ffffff"));
        textView.setTypeface(font);
        textView.setText(gridValues[position]);

        String icon_tag_name = gridValues[position];

        if (icon_tag_name.equals("Mobile")) {

            imageView.setImageResource(R.drawable.vmobile_blue);

        } else if (icon_tag_name.equals("Data Card")) {

            imageView.setImageResource(R.drawable.vdatacard_blue);

        } else if (icon_tag_name.equals("DTH")) {

            imageView.setImageResource(R.drawable.vdth_blue);

        } else if (icon_tag_name.equals("Postpaid/Landline")) {

            imageView.setImageResource(R.drawable.vpostpaid_blue);

        } else if (icon_tag_name.equals("Money Transfer")) {

            imageView.setImageResource(R.drawable.vmoney_blue);

        } else if (icon_tag_name.equals("Electricity")) {

            imageView.setImageResource(R.drawable.velectricity_blue);

        } else if (icon_tag_name.equals("Bus Ticket")) {

            imageView.setImageResource(R.drawable.vbus_blue);

        } else if (icon_tag_name.equals("Entertainment")) {

            imageView.setImageResource(R.drawable.ventertainment_blue);

        } else if (icon_tag_name.equals("GasBill")) {

            imageView.setImageResource(R.drawable.vgas_blue);

        } else if (icon_tag_name.equals("Waterbill")) {

            imageView.setImageResource(R.drawable.vwater_blue);

        } else if (icon_tag_name.equals("Lifeinsurence")) {

            imageView.setImageResource(R.drawable.vinsurance_blue);

        } else if (icon_tag_name.equals("GiftVoucher")) {

            imageView.setImageResource(R.drawable.vgift_blue);

        } else {
            imageView.setImageResource(R.drawable.vflight_blue);
        }

    } else {

        gridView = (View) convertView;

    }

    return gridView;
}

}

【问题讨论】:

标签: android


【解决方案1】:

您可以将选择器定义为可绘制对象并将其添加为网格项目的背景。

首先,创建一个包含选择器的新 Drawable 资源文件:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="false" android:state_focused="true" android:color="@color/your_pressed_color" />
    <item android:state_pressed="true" android:color="@color/your_pressed_color" />
    <item android:color="@color/your_default_color" />
</selector>

然后,将此选择器添加到您的网格项目中:

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

    <!--The grid item layout elements-->

</LinearLayout>

【讨论】:

    【解决方案2】:
    gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                v.setBackgroundColor(Color.RED);
            }
    
        });
    

    【讨论】:

    • 对不起,在我的情况下它不起作用我需要为我的网格选择效果我不需要更改项目颜色,谢谢你的回答
    【解决方案3】:

    使用这个

    /res/drawable/grid_view_item.xml

    <item android:state_pressed="true" >
        <shape>
            <solid android:color="@color/grid_item_pressed"/>
        </shape>
    </item>
    

    /res/values/colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="grid_item_pressed">#ffaa66</color>
    </resources>
    

    现在将android:background="@drawable/grid_view_item" 属性放在包含网格视图的xml

    【讨论】:

      【解决方案4】:

      创建一个活动 XML 布局 grid_color_selector.xml 并在 android:background="@drawable/grid_color_selector" 中的自定义 GridView 布局中使用此布局。

      <?xml version="1.0" encoding="utf-8"?>
          <selector xmlns:android="http://schemas.android.com/apk/res/android">
      
              <item android:drawable="@android:color/holo_blue_light" android:state_pressed="true"/>
              <item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/>
              <item android:drawable="@color/white"/>
      
          </selector>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多