--这是我的Java code.How,我可以对所有安卓设备响应这个页面吗?,我还有一个xml code...which,如下所示。我尽力做了很多,但我做不到。我是Android的初学者。我的主要动机是响应下一页。顺便说一下,我只为很少的设备修复了它。我用xml修正了这个视图,但我认为它的主要问题是Java代码。
public void fill_grid()
{
for(int i=0;i<9;i++)
{
int text=cells.get(i);
AbsoluteLayout.LayoutParams absParams =
(AbsoluteLayout.LayoutParams)buttons[text].getLayoutParams();
switch(i)
{case(0):
absParams.x = 15;
absParams.y = 15;
buttons[text].setLayoutParams(absParams);
break;
case(1):
absParams.x = 170;
absParams.y = 15;
buttons[text].setLayoutParams(absParams);
break;
case(2):
absParams.x = 325;
absParams.y = 15;
buttons[text].setLayoutParams(absParams);
break;
case(3):
absParams.x = 15;
absParams.y = 185;
buttons[text].setLayoutParams(absParams);
break;
case(4):
absParams.x =170;
absParams.y =185;
buttons[text].setLayoutParams(absParams);
break;
case(5):
absParams.x =325;
absParams.y =185;
buttons[text].setLayoutParams(absParams);
break;
case(6):
absParams.x = 15;
absParams.y = 355;
buttons[text].setLayoutParams(absParams);
break;
case(7):
absParams.x = 170;
absParams.y = 355;
buttons[text].setLayoutParams(absParams);
break;
case(8):
absParams.x = 325;
absParams.y = 355;
buttons[text].setLayoutParams(absParams);
break;
} 这是我的xml文件.我想它还不能100%确定,但是我试了那么多.我在寻找越来越多的如何解决它,但我找不到它.
<AbsoluteLayout
android:id="@+id/GameField"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentEnd="false"
android:layout_alignParentStart="false"
android:foregroundGravity="center"
android:layout_alignParentTop="false"
android:layout_alignParentLeft="false"
android:layout_alignParentBottom="false"
android:layout_alignParentRight="false"
android:layout_alignWithParentIfMissing="false"
android:textAlignment="center">
<Button
android:id="@+id/Button00"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="15dp"
android:layout_y="15dp"
android:background="#000"
android:text="0"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button01"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="135dp"
android:layout_y="15dp"
android:text="1"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button02"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="255dp"
android:layout_y="15dp"
android:text="2"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button03"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="15dp"
android:layout_y="150dp"
android:text="3"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button04"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="135dp"
android:layout_y="150dp"
android:text="4"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button05"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="255dp"
android:layout_y="150dp"
android:text="5"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button06"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="15dp"
android:layout_y="285dp"
android:text="6"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button07"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="135dp"
android:layout_y="285dp"
android:text="7"
android:textSize="48sp">
</Button>
<Button
android:id="@+id/Button08"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_x="255dp"
android:layout_y="285dp"
android:text="8"
android:textSize="48sp"
android:layout_marginRight="54dp"
android:layout_marginEnd="54dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true">
</Button>
</AbsoluteLayout>发布于 2015-10-06 21:20:39
我建议研究线性布局或相关布局,以了解如何做出响应UI。
对于您的特定场景,我将使用GridLayout
这些布局擅长在网格中显示项目,就像您想要的那样。
您确实希望避免像switch语句那样指定视图的确切坐标。大部分间隔工作可以在您的布局中完成。
下面是我创建的包含GridView及其适配器的示例活动。
public class RelativeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_relative);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new NumberGridAdapter(this, Arrays.asList(getResources().getStringArray(R.array.numbers))));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(RelativeActivity.this, "" + position,
Toast.LENGTH_SHORT).show();
}
});
}
private class NumberGridAdapter extends BaseAdapter{
private List<String> values;
private Context context;
public NumberGridAdapter(Context c, List<String> numbers) {
context = c;
values = numbers;
}
@Override
public int getCount() {
return values.size();
}
@Override
public Object getItem(int position) {
return values.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(context, R.layout.grid_item_layout, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.grid_text_view);
tv.setText(""+position);
return convertView;
}
}
}下面是GridView: activity_relative.xml的布局
<?xml version="1.0" encoding="utf-8"?>
<GridView
android:id="@+id/gridview"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"
/>下面是每个网格单元使用的布局文件: grid_item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue"
android:orientation="vertical">
<TextView
android:id="@+id/grid_text_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minHeight="100dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
</RelativeLayout>Gridview设置位于xml和适配器中。您可以将任何类型的数据加载到其中。我已经将列数设置为三列,但您可以使用任何您想要的数字。这是作出更有反应的看法的第一步。
编辑:堆栈溢出并不是人们为您工作的地方。他们只是给了你问题的答案。你必须自己应用这个答案。这是唯一的学习方法。
这是你会为你的项目做的事情。
这是我对您的布局文件所做的更改。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/Game"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- THIS VIEW REPLACES YOUR ABSOLUTE LAYOUT & ALL THE BUTTONS -->
<!-- DEFINE THE BUTTONS IN CODE AND ADD THEM TO THE GRIDVIEW ADAPTER -->
<GridView
android:id="@+id/GameField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"/>
<TextView
android:id="@+id/MoveText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/moves_title"
android:textSize="30sp"
android:textColor="#ff0000"
android:layout_marginTop="41dp"
android:layout_below="@+id/GameField"
android:layout_centerHorizontal="true">
</TextView>
<TextView
android:id="@+id/MoveCounter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/MoveText"
android:layout_below="@+id/GameField"
android:layout_marginLeft="3dp"
android:layout_toRightOf="@+id/MoveText"
android:text="0"
android:textSize="30sp"
android:textColor="#010101">
</TextView>
</RelativeLayout>我对游戏活动做了一些修改:
onCreate() {
....
GridView gridview = (GridView) findViewById(R.id.GameField);
gridview.setAdapter(new NumberGridAdapter(this, Arrays.asList(buttons)));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(Game.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
private class NumberGridAdapter extends BaseAdapter {
private List<Button> values;
private Context context;
public NumberGridAdapter(Context c, List<Button> numbers) {
context = c;
values = numbers;
}
@Override
public int getCount() {
return values.size();
}
@Override
public Object getItem(int position) {
return values.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(context, R.layout.grid_item_layout, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.grid_text_view);
tv.setText(""+position);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
makeMove(values.get(position));
}
});
return convertView;
}
}
public Button[] findButtons() {
Button[] b = new Button[9];
b[0] = new Button(this);
b[0].setText("0");
b[0].setId(R.id.Button00);
b[1] = new Button(this);
b[0].setText("1");
b[1].setId(R.id.Button01);
b[2] = new Button(this);
b[2].setText("2");
b[2].setId(R.id.Button02);
b[3] = new Button(this);
b[3].setText("3");
b[3].setId(R.id.Button03);
b[4] = new Button(this);
b[4].setText("4");
b[4].setId(R.id.Button04);
b[5] = new Button(this);
b[5].setText("5");
b[5].setId(R.id.Button05);
b[6] = new Button(this);
b[6].setText("6");
b[6].setId(R.id.Button06);
b[7] = new Button(this);
b[7].setText("7");
b[7].setId(R.id.Button07);
b[8] = new Button(this);
b[8].setText("8");
b[8].setId(R.id.Button08);
return b;
}https://stackoverflow.com/questions/32979294
复制相似问题