【问题标题】:android studio margin changeandroid studio 边距变化
【发布时间】:2017-12-19 21:03:46
【问题描述】:

我试图研究,但我无法做出正面或反面,因为我对这个太陌生了。

我正在使用约束布局。 我有一个按钮,button1。 button1 的下边距为 10。

有没有一种简单的方法可以让我在单击按钮时将下边距更改为 20?

这是我的简单代码:

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (butt1){
                button1.setBackgroundResource(buttonpress2);
                butt1 = false;
            }else{
                button1.setBackgroundResource(buttonpress);
                butt1 = true;
            }
        }
    });

还有:

    <Button
    android:id="@+id/button1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/buttonpress"
    android:text="@string/button1Text"
    android:textSize="24sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="38dp" />

【问题讨论】:

    标签: android button margin


    【解决方案1】:

    然后创建一个新的布局参数对象,用视图已经拥有的那个来实例化它...这样它将保留您在 xml 中设置的所有属性,并且一旦您在此处更改就会更新。

    这样做....

    int marginInPixels = dpToPx(10);
    
    public int dpToPx(int dp) {
        DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
        return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));     
    }
    ConstraintLayout.LayoutParams params = 
    (ConstraintLayout.LayoutParams)button1.getLayoutParams();
    
    params.topMargin = marginInPixels; 
    button1.setLayoutParams(params);
    

    【讨论】:

    • 这似乎是我可以弄清楚的...有没有办法只更改一个边距...?这种方式似乎将它们全部归为 0。
    • 是的,如果你想改变上边距使用这个:params.topMargin = 10 或左边距使用这个 params.leftMargin = 12。
    • 谢谢!不确定这是否会是一个优雅的解决方案,但这是我现在能处理的全部!非常感谢您的帮助!
    • 很高兴这对您有所帮助,一个小建议,您不应该以像素为单位设置边距值,因为它不适合不同的屏幕尺寸,而是使用此链接“stackoverflow.com/questions/8309354/…”了解如何将dp值转换为像素然后应用它。
    • 如果你还在的话最后一个问题...我知道了,所以它会改变...但似乎我的原始边距设置为 10dp,而新的 '20' 没有'似乎不在 dp.... 想法?在我问之前回答!
    【解决方案2】:

    尝试使用开发者指南https://developer.android.com/reference/android/support/constraint/ConstraintLayout.LayoutParams.html中提到的ConstraintLayout.LayoutParams

    你可以这样做:

    ConstraintLayout.LayoutParams params = new  ConstraintLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.setMargins(left, top, right, bottom);
    button1.setLayoutParams(params);
    

    【讨论】:

    • 当我尝试这个时,它改变了我的按钮的形状,将它移动到右上角,我不知道如何调整它以使其工作....
    • 感谢您的帮助!我真的很感激,即使我看不懂。
    猜你喜欢
    • 2016-06-24
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多