Java 如何动态更改按钮的位置
我有一个Java 如何动态更改按钮的位置,java,android,android-layout,button,Java,Android,Android Layout,Button,我有一个main活动最初是空的,带有一个操作栏。单击操作栏中的“加号”,我打开一个带有EditText和两个按钮“取消”和“继续”的DialogFragment。我不能发布图片,因为我没有足够的声誉,但当我点击“继续”时,我创建了两个按钮;一个位于MainActivity布局的右上角,另一个位于上一个布局的正下方,位于左侧。我想要的是,每次单击“继续”,我都可以创建两个按钮,它们的位置与我前面解释的相同 这是我写的代码,但它不能像我希望的那样工作 主要活动 public class MainAc
main活动
最初是空的,带有一个操作栏。单击操作栏中的“加号”,我打开一个带有EditText
和两个按钮“取消”和“继续”的DialogFragment
。我不能发布图片,因为我没有足够的声誉,但当我点击“继续”时,我创建了两个按钮;一个位于MainActivity
布局的右上角,另一个位于上一个布局的正下方,位于左侧。我想要的是,每次单击“继续”,我都可以创建两个按钮,它们的位置与我前面解释的相同
这是我写的代码,但它不能像我希望的那样工作
主要活动
public class MainActivity extends FragmentActivity implements IProjectDialFrag {
private ProjectDialogFragment projectDialFrag = new ProjectDialogFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
//TODO
return true;
case R.id.filters:
Intent intent1 = new Intent(MainActivity.this, FiltersActivity.class);
startActivity(intent1);
return true;
case R.id.action_new:
return true;
case R.id.add_button:
Intent intent2 = new Intent(MainActivity.this, ButtonsActivity.class);
startActivity(intent2);
return true;
case R.id.add_project:
projectDialFrag.show(getFragmentManager(), "projectDialog");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {
return;
}
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
EditText editText = (EditText) dialog.getDialog().findViewById(R.id.project_name);
String projectName = editText.getText().toString();
Button projectButton = new Button(this);
projectButton.setText(projectName);
ImageButton playButton = new ImageButton(this);
playButton.setImageResource(R.drawable.ic_action_play_over_video);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.button_row);
linearLayout.addView(projectButton);
linearLayout.addView(playButton);
}
}
接口
public interface IProjectDialFrag {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
对话片段呢
public class ProjectDialogFragment extends DialogFragment {
private IProjectDialFrag iProjDialFrag;
@SuppressLint("InflateParams")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder createProjectAlert = new AlertDialog.Builder(getActivity());
createProjectAlert.setTitle("Create Project");
LayoutInflater inflater = getActivity().getLayoutInflater();
createProjectAlert.setView(inflater.inflate(R.layout.project_dialog_fragment, null))
.setPositiveButton(R.string.conti_nue, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
iProjDialFrag.onDialogPositiveClick(ProjectDialogFragment.this);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
iProjDialFrag.onDialogNegativeClick(ProjectDialogFragment.this);
}
});
return createProjectAlert.create();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
iProjDialFrag = (IProjectDialFrag) activity;
}
}
主要活动的布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/button_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" >
</LinearLayout>
</RelativeLayout>
如果你需要一个截图,请给我一个点声誉,我会立即放置它。比你
再次感谢你。这是我的截图:
这是我想要的结果:
对于每个按钮,我必须能够添加更多的“播放”。但请查看您的布局
您的线性布局在宽度上为“包裹内容”。
此外,线性布局将粘贴到父对象的右侧。
所以这正是你将得到的。。。所有的线性布局内容都粘贴到右侧,并仔细检查其内容的大小。。。嗯,按钮。你正在得到你告诉Android要得到的东西
如果你想得到你画的东西,那么首先你的按钮线性布局应该是Widt中的match_parent,你可以将它的重力设置为左边的play按钮,右边的CIAO和LUCA按钮
<LinearLayout
...
android:layout_width="wrap_content"
... >
在MainActivity中,布局应更改为
<LinearLayout
...
android:layout_width="fill_parent"
... >
并添加这些行
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT) <---
lp.gravity = Gravity.RIGHT; <---
Button projectButton = new Button(this);
projectButton.setText(projectName);
projectButton.setLayoutParams(lp); <---
lp.gravity = Gravity.LEFT; <---
ImageButton playButton = new ImageButton(this);
playButton.setImageResource(R.drawable.ic_action_play_over_video);
playButton.setLayoutParams(lp); <---
LayoutParams lp=新的LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容)@udiboy1209
我只需重构您的代码,如下所示:
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
EditText editText = (EditText) dialog.getDialog().findViewById(R.id.project_name);
String projectName = editText.getText().toString();
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp1.gravity = Gravity.END;
Button projectButton = new Button(this);
projectButton.setText(projectName);
projectButton.setLayoutParams(lp1);
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp2.gravity = Gravity.START;
Button playButton = new Button(this);
playButton.setBackgroundResource(R.drawable.play_button_green);
playButton.setLayoutParams(lp2);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.button_row);
linearLayout.addView(projectButton);
linearLayout.addView(playButton);
}
截图请。。。你到底想要什么?单击“继续”时只添加两个按钮,或者它们是否应该继续增长?使用水平线性布局定义行布局xml,现在使用两个子按钮单击“继续”按钮时只将此行布局xml添加到“行线性布局”按钮。@udiboy1209我想将“播放”按钮放置在左侧上一个按钮的正下方,并带有字符串。你理解对了,我的想法是他们应该继续成长。我必须能够添加许多“播放”按钮一个接一个。我放置了两张显示我想要的结果的图像。@Haresh,你能解释得更清楚些吗?@Riccardo,你能指导我如何在相对布局中放置随机位置的多个动态按钮吗?这不起作用。使用您建议的代码,按钮都放置在布局的右侧。我刚刚修改了你的一些代码,它终于起作用了!谢谢大家!@里卡多你做了什么改变?