Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何动态更改按钮的位置_Java_Android_Android Layout_Button - Fatal编程技术网

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,你能指导我如何在相对布局中放置随机位置的多个动态按钮吗?这不起作用。使用您建议的代码,按钮都放置在布局的右侧。我刚刚修改了你的一些代码,它终于起作用了!谢谢大家!@里卡多你做了什么改变?