J'ai un FragmentActivity
avec cette disposition:
<?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>
et la classe ScrollerLinearLayout ressemble à ceci:
public class ScrollerLinearLayout extends LinearLayout {
// code of the class
}
Comment accéder de ScrollerLinearLayout
à la disposition parent pour obtenir, par exemple, le editetxt? FragmentActivity
et ScrollerLineraLayout
sont dans des packages différents des mêmes projets . J'ai essayé d'utiliser la fonction getParent()
de cette manière dans la ScrollerLinearLayout
mais cela ne fonctionne pas.
RelativeLayout r = (RelativeLayout) this.getParent().getParent();
int w = r.findViewById(R.id.editText1).getLayoutParams().width;
Quelqu'un m'aide? Merci!
La méthode getParent
renvoie une ViewParent
, pas une View
. Vous devez également lancer le premier appel vers getParent()
également:
RelativeLayout r = (RelativeLayout) ((ViewGroup) this.getParent()).getParent();
Comme indiqué dans les commentaires du PO, cela cause une NPE
. Pour déboguer, divisez cela en plusieurs parties:
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.
Si vous essayez de trouver une View
à partir de votre Fragment
, essayez de le faire comme ceci:
int w = ((EditText)getActivity().findViewById(R.id.editText1)).getLayoutParams().width;
Cela fonctionne aussi:
this.getCurrentFocus()
Il obtient la vue pour que je puisse l'utiliser.
La RelativeLayout
(c'est-à-dire la ViewParent
) doit avoir un identifiant de ressource défini dans le fichier de mise en page (par exemple, Android:id=@+id/myParentViewId
). Si vous ne le faites pas, l'appel à getId retournera null. Regardez cette réponse pour plus d’informations.