it-swarm.dev

الحصول على رأي الوالدين من تخطيط

لدي FragmentActivity مع هذا التصميم:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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" >

<TextView
    Android:id="@+id/textView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/menulabel"
    Android:textSize="24sp" />

<EditText
    Android:id="@+id/editText1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:ems="10"
    Android:inputType="text"
    Android:layout_below="@+id/textView1"
    Android:hint="@string/search_title_hint" />

<TextView
    Android:id="@+id/textView2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/spinnersearch"
    Android:layout_below="@+id/editText1" />

<LinearLayout
    Android:id="@+id/layout1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/textView2" >

    <Spinner
        Android:id="@+id/spinner_search"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:Prompt="@string/spinnersearch" />

    <Button
        Android:id="@+id/button1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/reset_search" />

</LinearLayout>

<Button
    Android:id="@+id/button2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/buttonnewcat"
    Android:layout_below="@+id/layout1" />

<Button
    Android:id="@+id/button3"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/buttondelcat" 
    Android:layout_below="@+id/button2" />

<Button
    Android:id="@+id/button4"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/buttoneditcat"
    Android:layout_below="@+id/button3" />

<Button
    Android:id="@+id/button5"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/buttonnewtext"
    Android:layout_below="@+id/button4" />

<Button
    Android:id="@+id/button6"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/buttondeltext"
    Android:layout_below="@+id/button5" />

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

    <side.menu.scroll.ScrollerLinearLayout
        Android:id="@+id/menu_content_side_slide_layout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical" >

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="45dp"
            Android:background="@drawable/ab_solid_example"
            Android:orientation="horizontal" >

            <ImageView
                Android:id="@+id/main_tmp_button"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/actionbar_background"
                Android:src="@drawable/download" />

        </LinearLayout>
        <FrameLayout
            Android:id="@+id/fragment_container"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="@drawable/bg_groud" />

    </side.menu.scroll.ScrollerLinearLayout>
</RelativeLayout>

وفئة ScrollerLinearLayout شيء من هذا القبيل:

public class ScrollerLinearLayout extends LinearLayout {
    // code of the class
}

كيفية الوصول من ScrollerLinearLayout إلى التصميم الأصلي للحصول على - على سبيل المثال - editetxt؟ FragmentActivity و ScrollerLineraLayout في حزم مختلفة من نفس المشاريع. حاولت استخدام الدالة getParent() بهذه الطريقة داخل ScrollerLinearLayout لكنها لا تعمل.

RelativeLayout r = (RelativeLayout) this.getParent().getParent();
int w = r.findViewById(R.id.editText1).getLayoutParams().width;

شخص يساعدني؟ شكر!

39
Salvatore Ucchino

الأسلوب getParent بإرجاع ViewParent ، وليس View. تحتاج إلى إرسال المكالمة الأولى إلى getParent() أيضًا:

RelativeLayout r = (RelativeLayout) ((ViewGroup) this.getParent()).getParent();

كما هو مذكور في تعليقات OP ، هذا يسبب NPE. لتصحيح ، تقسيم هذا إلى أجزاء متعددة:

ViewParent parent = this.getParent();
RelativeLayout r;
if (parent == null) {
    Log.d("TEST", "this.getParent() is null");
}
else {
    if (parent instanceof ViewGroup) {
        ViewParent grandparent = ((ViewGroup) parent).getParent();
        if (grandparent == null) {
            Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is null");
        }
        else {
            if (parent instanceof RelativeLayout) {
                r = (RelativeLayout) grandparent;
            }
            else {
                Log.d("TEST", "((ViewGroup) this.getParent()).getParent() is not a RelativeLayout");
            }
        }
    }
    else {
        Log.d("TEST", "this.getParent() is not a ViewGroup");
    }
}

//now r is set to the desired RelativeLayout.
71
Phil

إذا كنت تحاول العثور على View من Fragment ، فحاول القيام بذلك على النحو التالي:

int w = ((EditText)getActivity().findViewById(R.id.editText1)).getLayoutParams().width;
7
waqaslam

RelativeLayout (بمعنى ViewParent) يجب أن يكون له معرف مورد معرف في ملف التخطيط (على سبيل المثال ، Android:[email protected]+id/myParentViewId). إذا لم تقم بذلك ، فستعود الدعوة إلى getId لاغية. انظر هذه الإجابة لمزيد من المعلومات.

1
Aditya369

اكتب فقط

this.getRootView();
0
M.Hefny

هذا يعمل أيضا:

this.getCurrentFocus()

يحصل على المنظر حتى أتمكن من استخدامه.

0
JFreeman