在所需位置移动按钮

时间:2018-06-25 13:39:10

标签: android

我有这个问题:我想在某些位置放置一些Button,例如在屏幕的四个正方形处(已解决),并且我也希望当单击每个按钮时,在这些位置正好变成红色(尚未解决)。

这是主要的xml:

 $message = '<?xml version="1.0" encoding="UTF-8" ?>
    <command name="userlist">
</command>';

这是主要的java:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:layout_weight="15"
    android:orientation="vertical">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:components="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/layout1">
        <Button
            android:id="@+id/one"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@color/colorPrimary"/>
        <Button
            android:id="@+id/two"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentEnd="true"
            android:background="@color/colorPrimary" />
        <Button
            android:id="@+id/three"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary" />
        <Button
            android:id="@+id/four"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:background="@color/colorPrimary"/>
    </RelativeLayout>
</ScrollView>
</android.support.constraint.ConstraintLayout>

5 个答案:

答案 0 :(得分:1)

在onCreate中设置您的按钮:

    RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout1);
    RelativeLayout.LayoutParams rel_btn = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

    Button one = (Button) findViewById(R.id.one);
    one.setOnClickListener(listen);
    Button two = (Button) findViewById(R.id.two);
    two.setOnClickListener(listen);
    Button three = (Button) findViewById(R.id.three);
    three.setOnClickListener(listen);
    Button four = (Button) findViewById(R.id.four);
    four.setOnClickListener(listen);

最后为所有4个按钮创建监听器:

private View.OnClickListener listen = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        GradientDrawable drawable = new GradientDrawable();
        drawable.setShape(GradientDrawable.RECTANGLE);
        drawable.setStroke(8, Color.RED);

        Button button = (Button) view;  
        button.setBackground(drawable);
    }
};

答案 1 :(得分:0)

好吧,如果为这些按钮提供ID,则可以在单击它们时更改其颜色。

因此,如果您点击buttonID,请执行逻辑,然后将颜色更改为buttonID。

// If you're in an activity:
buttonID.setBackgroundColor(getResources().getColor(R.color.red));

将红色添加到您的颜色xml中。

这可以放在您的onCreate中。 XML中按钮的ID处的buttonOne和buttonTwo。 这是最基本的方法。还有更多的方法,您也可以在这里看到这些答案。

buttonOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //logic here
            }
        });

buttonTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //logic here
            }
        });

答案 2 :(得分:0)

当您有听众时,更改某些内容相对容易。您不需要实现不同的方法,也不需要一个个地检查每个按钮。由于Button也是一个视图,因此请执行以下伪代码。

// You need this if part, if you have other views that having the same listener. 
// Otherwise, you do not need this if check.
if(is Clicked View is Button) {
    // Now here, take the clicked view, which we know it is a button and change its colour.
}

顺便说一下,上面的代码将在覆盖的方法onClick中。

编辑

为澄清起见,我添加了一小段代码。

@Override
public void onClick(View view) {
    // Checking if the clicked View is a Button or not.
    if(view instanceof Button) {

        // view.getId() returns an integer.
        Button clickedButton = (Button) findViewById(view.getId());

        // Now, change the button's colour.
        clickedButton.setBackground(........);
    }
}

希望有帮助。祝你有美好的一天!

答案 3 :(得分:0)

如果在布局中创建了Buttons,那么为什么要动态添加它。 如果使用布局,则使用“ findViewById()”为这些按钮充气。然后,当用户单击时,对该按钮或所有按钮执行操作。

one.setBackgroundColor(Color.RED); 

但是,如果您使用的是动态按钮创建,则存储要创建的所有4个按钮ID。然后执行类似的操作。

buttonId[index].setBackgroundColor(Color.RED); 

答案 4 :(得分:0)

使您的主类实现为View.OnclickListener

 public class MainFragment extends Fragment implements View.OnClickListener {

                 private void setUpViews() {
                        button1.setOnClickListener(this);
                        button2.setOnClickListener(this);
                        button3.setOnClickListener(this);
                        button4.setOnClickListener(this);
                    }}

 @Override
 public void onClick(View view) {
            if(view instance of Button){
            button.setBackgroundColor(getResources().getColor(android.R.color.holo_red_dark));
                 }
         }
 }