android ConstraintLayout高度百分比0.99

时间:2018-09-24 15:11:38

标签: android layout android-constraintlayout

当app:layout_constraintHeight_percent为0.50或0.80时,它可以正常工作,但是当我将其设置为0.99时,Button会变得很长并且大于屏幕的99%?

[HttpPost]
public ActionResult InsertProduct(Product Product)
{
   var returnMessage = "";

    try
    {
        InsertProductBLL ProductInsertion = new InsertProductBLL (Product.Value, Product.Description);

        var result = ProductInsertion.IsValid(Product.Value);

        returnMessage  = result.HasResult 
        ? result.SuccessMessage
        : result.ErrorMessage;
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
        returnMessage = "Fail";
    }

    return PartialView(returnMessage);
}

3 个答案:

答案 0 :(得分:0)

这应该有效;

<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">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Button 1" />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Button 2" />

            </RelativeLayout>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

答案 1 :(得分:0)

尝试以下代码:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <android.support.constraint.ConstraintLayout
        android:background="@android:color/holo_blue_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_one"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintHeight_percent="0.91"
            android:text="1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />

        <Button
            android:id="@+id/btn_two"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btn_one"
            app:layout_constraintVertical_bias="0.0"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" />

    </android.support.constraint.ConstraintLayout>

</ScrollView>

希望对您有帮助。

答案 2 :(得分:0)

问题不在于99%layout_constraintHeight_percent,而是当两个按钮的组合高度超过ScrollView的屏幕高度时。碰巧有99%的人在您的模拟器/设备上触发了这种任性的行为。如果您将第二个按钮调高得多,则百分比会变小。

我发现这些类型的布局存在问题,其中孩子的尺寸取决于父母的大小,而父母的大小取决于孩子的大小。在您的布局中,子级mybtn1取决于父级ConstraintLayoutapp:layout_constraintHeight_percent="0.99"),而父级ConstraintLayout取决于子级mybtn1({{ 1}})。当两个按钮的组合高度未超过android:layout_height="wrap_content"的屏幕高度时,这似乎行得通,但是当组合高度超过其ScrollView时,失败了。 (当合并高度小于android:fillViewport="true"高度时,在ScrollView上设置ScrollView可能会起作用,因为ScrollView有一个隐含的固定高度,即屏幕上的可用房地产。不过,这只是个推测。)

您可以通过以下一些编码来解决此问题:

ScrollView添加ID:

android:id="@+id/scrollView"

将以下代码放在onCreate()中:

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

    final ScrollView scrollView = findViewById(R.id.scrollView);
    scrollView.post(new Runnable() {
        @Override
        public void run() {
            Button button = findViewById(R.id.mybtn1);
            ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) button.getLayoutParams();

            // Get percentage height of button.
            float percent = lp.matchConstraintPercentHeight;

            // Explicitly set the button height based upon the ScrollView height.
            button.setHeight((int) (scrollView.getHeight() * percent));

            // Reset the percent height so it no longer has any effect.
            lp.matchConstraintPercentHeight = 1.0f;
        }
    });
}

此代码将强制mybtn1上的大小为ScrollView高度的99%或为按钮指定的百分比。