Android:以编程方式旋转按钮内部的文本

huangapple 未分类评论41阅读模式
英文:

Android: Programatically rotating the text inside a button

问题

[{可视辅助}][1]
我正在制作一个带有拖放菜单的应用程序用户可以填写三个编辑框宽度高度和旋转),然后按下添加新按钮按钮一个具有指定值的新按钮将被创建在原点处但是如果旋转属性不是0而是例如45度那么整个按钮连同文本一起旋转我希望文本保持水平不进行旋转我已经查阅了一些帖子但它们都涉及到我已经在使用的旋转属性

onViewCreated()

    tvAddTable = view.findViewById(R.id.btn_add_table);
        tvWidth = view.findViewById(R.id.et_width);
        tvHeight = view.findViewById(R.id.et_height);
        tvRotation = view.findViewById(R.id.et_rotation);
        mSize = new Point();
        mDisplay = Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay();
        mDisplay.getSize(mSize);

        final View.OnTouchListener touchListener = this;
        tvAddTable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ConstraintLayout layout = view.findViewById(R.id.floor_layout);

                // 为按钮设置属性
                Button btnTag = new Button(getContext());
                btnTag.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

                if(ids.isEmpty()){
                    ids.add(0);
                }else{
                    ids.add(ids.size());
                }
                btnTag.setId(ids.size());
                btnTag.setText(Integer.toString(btnTag.getId()));

                // 将按钮添加到布局中
                layout.addView(btnTag);
                btnTag.setLayoutParams(new ConstraintLayout.LayoutParams(Integer.parseInt(tvWidth.getText().toString()), Integer.parseInt(tvHeight.getText().toString())));
                btnTag.setRotation(Integer.parseInt(tvRotation.getText().toString()));
                btnTag.setOnTouchListener(touchListener);
            }
        });


  [1]: https://i.stack.imgur.com/on7VL.png
英文:

{Visual Aid}
I am making an application with a drag and drop menu. User can fill out three edit texts (width, height, and rotation) then press on "add new" button and a new button with the specified values is created at the origin. However if the rotation attribute is anything other than 0 say 45 degrees, then it rotates the whole button along with the text. I would like for the text to remain horizontal with no rotation. I have looked up but the post all refer back to the rotation attribute which i am already using.

onViewCreated()

tvAddTable = view.findViewById(R.id.btn_add_table);
    tvWidth = view.findViewById(R.id.et_width);
    tvHeight = view.findViewById(R.id.et_height);
    tvRotation = view.findViewById(R.id.et_rotation);
    mSize = new Point();
    mDisplay = Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay();
    mDisplay.getSize(mSize);

    final View.OnTouchListener touchListener = this;
    tvAddTable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {[enter image description here][1]
            ConstraintLayout layout = view.findViewById(R.id.floor_layout);

            //set the properties for button
            Button btnTag = new Button(getContext());
            btnTag.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

            if(ids.isEmpty()){
                ids.add(0);
            }else{
                ids.add(ids.size());
            }
            btnTag.setId(ids.size());
            btnTag.setText(Integer.toString(btnTag.getId()));

            //add button to the layout
            layout.addView(btnTag);
            btnTag.setLayoutParams(new ConstraintLayout.LayoutParams(Integer.parseInt(tvWidth.getText().toString()), Integer.parseInt(tvHeight.getText().toString())));
            btnTag.setRotation(Integer.parseInt(tvRotation.getText().toString()));
            btnTag.setOnTouchListener(touchListener);
        }
    });

答案1

得分: 0

旋转属性会旋转整个视图,而不仅仅是文本或背景。这是设计上的考虑。没有文本或背景旋转属性。如果你需要这样的功能,可以创建一个自定义视图。

如果你只想要旋转背景,可能可以通过将背景可绘制对象设置为一个包装了所需背景的 RotateDrawable 来实现。

英文:

The rotation attribute rotates the entire view, not just the text or just the background. That's by design. There is no text or background rotation attribute. If you need that, make a custom view.

If you only want the background to rotate, you can probably do it by setting the background drawable to a RotateDrawable that wraps the background you want.

huangapple
  • 本文由 发表于 2020年4月4日 15:22:43
  • 转载请务必保留本文链接:https://java.coder-hub.com/61024960.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定