Android:将leftMargin属性设置为按钮会自动调整大小

时间:2014-09-15 06:37:20

标签: android margin

我的布局中有一个简单的按钮。将leftMargin设置为实际显示不同结果的视图。

my_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/left_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="hello pandora"/>

</RelativeLayout>

在我的活动中,我将leftMargin属性设置为Button。

Button leftBtn = (Button) findViewById(R.id.left_btn);
LayoutParams params = (LayoutParams) leftBtn.getLayoutParams();
params.leftMargin = 550;

如果我将leftMargin设置为负值或0,则其工作正常,但如果我将该值设置为大于屏幕宽度,则只需调整大小/压缩按钮。我期待按钮超出界限,如负值。

enter image description here

我希望第3张图片中的按钮超出第1幅图像中的按钮。 enter image description here

请不要说在布局中设置按钮layout_alignParentRight="true",在活动中设置rightMargin = -50(这样可行),因为我想从左到右移动按钮。

3 个答案:

答案 0 :(得分:0)

当你使用leftMargin = 550时,你可以使用max line = 1在按钮的一行中显示完整的文字;

试试这个

 <Button
    android:id="@+id/left_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:maxLines="1"
    android:text="hello pandora"/>

答案 1 :(得分:0)

你好像这样编辑你的按钮属性,

机器人:layout_gravity = “CENTER_HORIZONTAL”

android:singleLine =“true”

并将父布局更改为frameLayout

答案 2 :(得分:0)

我假设将一个大于屏幕尺寸(例如1000 dp)的特定宽度分配给父亲RelativeLayout应解决您的问题。

另外,为什么要制作屏幕外的UI元素?什么是期望的行为?也许过渡动画会更好?

修改

我已经尝试了动画+存储Button的测量宽度。它似乎工作。 你能试试GB吗?

<强> MainActivity.java

public class MainActivity extends Activity {

final Context context = this;
Button mButton;
int mButtonWidth; // Measured width of Button
int amountToMove; // Amount to move the button in the x direction

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    amountToMove = 600;

    mButton = (Button) findViewById(R.id.button);
    // Measure Button's width
    mButton.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    mButtonWidth = mButton.getMeasuredWidth();
    // Simple onClick listener showing a Toast
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,"Hello Pandora clicked!",Toast.LENGTH_SHORT).show();
        }
    });

    // Onclick listener for the other button
    Button toggle = (Button) findViewById(R.id.toggle);
    toggle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Animate the other button
            TranslateAnimation a = new TranslateAnimation(0, amountToMove, 0, 0);
            a.setDuration(1000);
            // Finalize movement when animation ends
            a.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationEnd(Animation animation) {
                    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mButton.getLayoutParams();
                    // Restore measured width and change left margin
                    lp.width = mButtonWidth;
                    lp.leftMargin = lp.leftMargin + amountToMove;
                    mButton.setLayoutParams(lp);
                    amountToMove = -amountToMove;
                }
                @Override
                public void onAnimationStart(Animation animation) { /* Do nothing */ }
                @Override
                public void onAnimationRepeat(Animation animation) { /* Do nothing */ }
            });
            mButton.startAnimation(a);
        }
    });
}
}

<强> activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello Pandora"
    android:id="@+id/button" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Move the other button"
    android:id="@+id/toggle"/>

</LinearLayout>

编辑2

它也可以在GB模拟器上工作(Button被剪切,可点击)。