【发布时间】:2017-04-12 05:18:07
【问题描述】:
我正在 Android 上构建数独应用程序。我想用 81 个文本视图填充屏幕。我为此使用了 GridView。有些我的选择器无法正常工作。我为文本视图的背景定义了两个 xml。一个用于选中和未选中。我有一个在 Gridview xml 中调用的选择器 xml。但是当我点击它们时,我的文本视图是不可选的。
这是我的 xml: selected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ffffff" />
<stroke android:width="4dp" android:color="#4f7df2"/>
</shape>
unselected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ffffff" />
<stroke android:width="0.5dp" android:color="#9C7F7F"/>
</shape>
选择器.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selected"
android:state_selected="true"/>
<item android:drawable="@drawable/unselected"/>
</selector>
我还想进一步将其划分为 9 个网格。我想用网格线来划分它,这样用户就可以清楚地看到他在哪个网格中。我该如何实现这个目标?
这是我的 SudokuAdapter 类
public class SudokuAdapter extends BaseAdapter {
private Context context;
public SudokuAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return 81;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
textView = new TextView(context);
textView.setBackground(context.getDrawable(R.drawable.unselected));
textView.didTouchFocusSelect();
textView.requestFocus();
textView.setLayoutParams(new GridView.LayoutParams(60, 60));
} else {
textView = (TextView) convertView;
}
return textView;
}
}
我尝试从上面删除 setBackground,然后选择器仅用于选择文本视图。如果未选中,我希望默认背景被取消选中。
这是我的活动:
public class TestActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sudoku_grid_layout);
GridView gridView = (GridView) findViewById(R.id.sudoku_grid);
gridView.setAdapter(new SudokuAdapter(this));
}
}
这是我的 xml:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sudoku_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="9"
android:listSelector="@drawable/selector"
android:gravity="center"
/>
【问题讨论】:
标签: java android android-layout gridview