如何在Android中以编程方式更改按钮大小?

时间:2018-06-28 07:34:49

标签: android button

我正在创建按钮,并将它们以编程方式添加到LinearLayout中。但是,我正在努力更改按钮的大小。在下面的代码中,无论我在deleteBtn.setWidth(num)和deleteBtn.setHeight(num)中输入什么数字,都不会改变。

private void populateHorizontalLayouts(CustomMessageEvent event) {
    // Need to remove all views each time an user adds a number
    // so that the same number is not rendered multiple times.

    nameAndNumbersLayout.removeAllViews();

    //displayedNamesAndNumbers.add(event.getCustomMessage());
    for(int i =0; i < displayedNamesAndNumbers.size(); i++){
        String displayedNumberAndName = displayedNamesAndNumbers.get(i);

        LinearLayout horizontalLayout = new LinearLayout(view.getContext());
        horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);
        horizontalLayout.setId(i);

        Button deleteBtn = new Button(view.getContext());
        deleteBtn.setId(i);
        deleteBtn.setText("Delete");
        deleteBtn.setWidth(5);
        deleteBtn.setHeight(5);

        TextView nameAndNumView = new TextView(view.getContext());
        nameAndNumView.setId(i);
        nameAndNumView.setText(displayedNumberAndName);

        horizontalLayout.addView(deleteBtn);
        horizontalLayout.addView(nameAndNumView);

        nameAndNumbersLayout.addView(horizontalLayout);
    }
}

我应该写些什么以便按钮大小改变?

6 个答案:

答案 0 :(得分:2)

尝试这个

deleteBtn.setLayoutParams (new LayoutParams(LayoutParams.MATCH_PARENT, 15));

答案 1 :(得分:2)

您应应用LayoutParams中的LinearLayout中的Button

deleteBtn.setLayoutParams(new LinearLayout.LayoutParams(5, 5));

答案 2 :(得分:1)

尝试以下操作:

int pixels = Math.round(convertDpToPixel(50, getApplicationContext()));

deleteBtn.setLayoutParams(new LinearLayout.LayoutParams(pixels, pixels));

public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    return px;
    }

答案 3 :(得分:0)

您可以使用LayoutParams设置宽度和高度,通常当我使用尺寸进行管理时,会将其用作参考屏幕的尺寸。 我经常这样做:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

float targetWidth = width / 3;
float targetHeight = targetWidth * 3;
deleteBtn.setLayoutParams(new LinearLayout.LayoutParams(targetWidth, targetHeight);

答案 4 :(得分:0)

如果您只想更改高度并保持宽度不变,

deleteBtn.setLayoutParams (new LayoutParams(5, deleteBtn.getLayoutParams().getHeight()));

并仅更改宽度,

Future<FirebaseUser> _handleSignIn() async {
  try {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    final FirebaseUser user =(await _auth.signInWithCredential(credential)).user;
    print("signed in " + user.displayName);
    Navigator.of(context).push(MaterialPageRoute(builder: (_) {
            return HomePage();
          }));

    // print("signed in " + user.displayName);
    return user;
  } catch (error) {
    print(error);
  }
}

答案 5 :(得分:0)

搜索要在表格行[tbrow]中显示的按钮[del]的答案,只会导致设置出现该按钮的表格行的参数。

            del = new Button(getApplicationContext());
            del.setText("DELETE");
            del.setTextColor(Color.BLACK);
            del.setGravity(Gravity.END);
            del.setBackgroundColor(Color.parseColor("#FFFFC107"));       
            del.setLayoutParams (new TableRow.LayoutParams(80, 50));
            tbrow.addView(del);