android of - ضبط الحد الأقصى للعرض على ViewGroup




root studio (6)

إضافة طبقة تخطيط خارجي أو طبقة Viewgroup إلى ملف التخطيط الحالي الخاص بك. سيكون ارتفاع وعرض هذا التنسيق أقصى ارتفاع / عرض. الآن يمكن تعيين التخطيط الداخلي الخاص بك إلى التفاف المحتوى ومحدود التخطيط الخارجي. على سبيل المثال:

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

    <!-- OuterLayout to set Max Height and Width  -- Add this ViewGroup to your layout  File  -->
    <LinearLayout
        android:id="@+id/outerLayout"
        android:layout_width="650dp"
        android:layout_height="650dp"
        android:orientation="vertical" >

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

كيف أقوم بتعيين أقصى عرض لملف ViewGroup؟ أنا Theme.Dialog نشاط Theme.Dialog ، ومع ذلك ، هذا لا يبدو جيدًا عند تغيير حجمه إلى شاشات أكبر ، إنه أيضًا نوع من الوزن الخفيف ولا أريده أن Theme.Dialog الشاشة بأكملها.

حاولت هذا الاقتراح دون جدوى. أيضًا ، لا توجد خاصية android:maxWidth مثل بعض المشاهدات.

هل هناك طريقة لتقييد الجذر LinearLayout بحيث يكون فقط (على سبيل المثال) 640 تراجع؟ أرغب في التغيير إلى مجموعة صور أخرى لهذا.

أي اقتراحات؟


الآن android.support.constraint.ConstraintLayout يجعل الأمر أسهل. فقط قم بإلغاء العرض (من أي نوع) باستخدام ConstraintLayout ، وقم بتعيين السمات التالية إلى طريقة العرض:

android:layout_width="0dp"
app:layout_constraintWidth_default="spread"
app:layout_constraintWidth_max="640dp"

http://tools.android.com/recent/constraintlayoutbeta5isnowavailable


هنا هو رمز أفضل لجواب دوري.

في طريقة onMeasure ، إذا قمت بالاتصال super.onMeasure(widthMeasureSpec, heightMeasureSpec); أولاً في الطريقة لن يتم تغيير عرض كل الكائنات في التخطيط. لأنه تمت تهيئتها قبل تعيين عرض التخطيط (الأصل).

public class MaxWidthLinearLayout extends LinearLayout {
    private final int mMaxWidth;

    public MaxWidthLinearLayout(Context context) {
        super(context);
        mMaxWidth = 0;
    }

    public MaxWidthLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MaxWidthLinearLayout);
        mMaxWidth = a.getDimensionPixelSize(R.styleable.MaxWidthLinearLayout_maxWidth, Integer.MAX_VALUE);
        a.recycle();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
        if (mMaxWidth > 0 && mMaxWidth < measuredWidth) {
            int measureMode = MeasureSpec.getMode(widthMeasureSpec);
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(mMaxWidth, measureMode);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

وهنا رابط لاستخدام xml attr:
http://kevindion.com/2011/01/custom-xml-attributes-for-android-widgets/

شكرا على هذا السؤال والأجوبة. ساعدتني إجابتك كثيرًا ، وآمل أن يساعد شخصًا آخر في المستقبل أيضًا.


خيار واحد وهو ما فعلته هو تمديد LinearLayout وتجاوز وظيفة onMeasure. فمثلا:

public class BoundedLinearLayout extends LinearLayout {

    private final int mBoundedWidth;

    private final int mBoundedHeight;

    public BoundedLinearLayout(Context context) {
        super(context);
        mBoundedWidth = 0;
        mBoundedHeight = 0;
    }

    public BoundedLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoundedView);
        mBoundedWidth = a.getDimensionPixelSize(R.styleable.BoundedView_bounded_width, 0);
        mBoundedHeight = a.getDimensionPixelSize(R.styleable.BoundedView_bounded_height, 0);
        a.recycle();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Adjust width as necessary
        int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
        if(mBoundedWidth > 0 && mBoundedWidth < measuredWidth) {
            int measureMode = MeasureSpec.getMode(widthMeasureSpec);
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(mBoundedWidth, measureMode);
        }
        // Adjust height as necessary
        int measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
        if(mBoundedHeight > 0 && mBoundedHeight < measuredHeight) {
            int measureMode = MeasureSpec.getMode(heightMeasureSpec);
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(mBoundedHeight, measureMode);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

بعد ذلك ، يمكنك استخدام XML للفئة المخصصة:

<com.yourpackage.BoundedLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:bounded_width="900dp">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</com.youpackage.BoundedLinearLayout>

وإدخال ملف attr.xml

<declare-styleable name="BoundedView">
    <attr name="bounded_width" format="dimension" />
    <attr name="bounded_height" format="dimension" />
</declare-styleable>

تعديل: هذا هو الرمز الفعلي الذي أستخدمه الآن. هذا لا يزال غير كامل ولكنه يعمل في معظم الحالات.


هنا إجابة بسيطة ،

يبدو أن العرض / الارتفاع دائمًا ما يتم تعيينهما معًا. هذا يعمل في رأيي.

    <Button
        android:text="Center"
        android:layout_width="100dp"
        android:layout_height="fill_parent"
        android:id="@+id/selectionCenterButton"
        android:minWidth="50dp"
        android:minHeight="50dp"
        android:maxWidth="100dp"
        android:maxHeight="50dp"
        android:layout_weight="1" />

يتم تعيين أصل الزر إلى التفاف المحتوى ، بحيث يتم تدريجه للأسفل ، ولكن يصل إلى 400 كحد أقصى (4 أزرار) كحد أقصى.


عليك ان تتغير

<style name="MyActionBar.MenuTextStyle"
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">

إلى

<style name="MyActionBar.MenuTextStyle"
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Menu">

كذلك. هذا يعمل بالنسبة لي.





android view width android-linearlayout