Expandierbare Listenansicht Gruppensymbol-Indikator nach rechts verschieben

Was die erweiterbare Listenansicht anbetrifft, so befindet sich die Gruppensymbolanzeige auf der linken Seite, kann ich den Indikator verschieben und nach rechts positionieren? Vielen Dank.

BEARBEITET: Da ich die Aussicht nicht verlängern möchte, habe ich diese Problemumgehung bekommen, um die Breite dynamisch zu bekommen. Ich habe nur meine Lösung geteilt.

  • Deaktivieren Sie den Zoom-Fokus in der Android-Webseite
  • Erstellen einer Android Lock Screen App.
  • Verhindern, dass CollapsingToolbarLayout kollabiert, wenn nicht benötigt
  • Warum verwenden wir den TaskStackBuilder?
  • Android: Wie kann man innerhalb der Spalte von TableLayout zentrieren?
  • Grid Layout Vs. Tabellenlayout
  •  Anzeigen newDisplay = getWindowManager (). GetDefaultDisplay (); 
     Int width = newDisplay.getWidth ();
     NewListView.setIndicatorBounds (width-50, width);
    

  • Android windowSoftInputMode = "adjustPan" blättert noch mehr
  • Bestätigen Sie, ob andre asset Eintrag eine Datei oder ein Verzeichnis ist
  • Ergebnis aus einer Aktivität nach beenden () erhalten; In einem Android-Unit-Test
  • Finde alle Klassen in einem Paket in Android
  • So fügen Sie ein Element zu einer Menügruppe in Navigationsansicht hinzu
  • Android: Benutzerdefinierte Titelleiste
  • 12 Solutions collect form web for “Expandierbare Listenansicht Gruppensymbol-Indikator nach rechts verschieben”

    Entsprechend dem Quellcode von ExpandableListView ist die einzige Möglichkeit, einen Indikator auf die rechte Seite zu verschieben, seine Grenzen mit der Methode ExpandableListView.setIndicatorBounds() zu ändern. Sie können z. B. gebunden in der Methode onSizeChanged() berechnen.

    SetIndicatorBounds (int, int) funktioniert nicht richtig für Android 4.3. Sie haben eine neue Methode setIndicatorBoundsRelative (int, int) eingeführt, die ok für 4.3 funktioniert.

     @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { mExpandableListView.setIndicatorBounds(myLeft, myRight); } else { mExpandableListView.setIndicatorBoundsRelative(myLeft, myRight); } } 

    Der beste Weg, dies zu tun ist unten, aber nicht für alle Android-Version So verwenden Sie die 2. oder dritte Methode unten angegeben

     ViewTreeObserver vto = mExpandableListView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mExpandableListView.setIndicatorBounds(mExpandableListView.getRight()- 40, mExpandableListView.getWidth()); } }); 

    oder dieses:

     @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); mExpandableListView.setIndicatorBounds(mExpandableListView.getRight()- 40, mExpandableListView.getWidth()); } 

    Wird diesen Indikator rechts neben der Listenansicht auch auf dem Gerät und auf der Registerkarte verschieben.

    Oder das kannst du in einem nachgeschriebenen Thread machen.

      (new Handler()).post(new Runnable() { @Override public void run() { mExpandableListView.setIndicatorBounds(mExpandableListView.getRight()- 40, mExpandableListView.getWidth()); } }); 

    Alle XML-Lösung! Ich fand einen besseren Weg, um dieses Problem anzugehen. Dies erfordert nicht, dass Sie mit Display-Metriken zu verwirren, keine Notwendigkeit, programmgesteuert hacken.

    Dies ist, was Sie tun müssen:

    1) setze die Layoutrichtung nach rechts nach links

     <ExpandableListView ... android:layoutDirection="rtl" /> 

    2) stellen Sie sicher, dass Ihre Liste Element Layout enthält diese (ja, benötigen Sie benutzerdefinierte Layout):

     android:gravity="left" //to adjust the text to align to the left again android:layoutDirection="ltr" //OR this line, based on your layout 

    Und du bist gut zu gehen!

    Ich habe versucht, setIndicatorBounds und setIndicatorBoundsRelative zu verwenden, aber das Icon nicht so schön wie erwartet. So ändere ich meinen Code wie unten:

    Erstellen Sie ein Gruppenlayout:

      <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="48dp" android:background="@drawable/header_selector" > <ImageView android:id="@+id/icon" android:layout_width="25dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:contentDescription="@string/desc_list_item_icon" android:src="@drawable/ic_home" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_toRightOf="@id/icon" android:gravity="center_vertical" android:minHeight="?android:attr/listPreferredItemHeightSmall" android:paddingRight="40dp" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@color/list_item_title" /> <TextView android:id="@+id/counter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="8dp" android:background="@drawable/counter_bg" android:textColor="@color/counter_text_color" /> <ImageView android:id="@+id/icon_expand" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="200dp" android:layout_toRightOf="@+id/counter" android:contentDescription="@string/desc_list_item_icon" android:src="@drawable/navigation_expand" android:visibility="visible" /> <ImageView android:id="@+id/icon_collapse" android:layout_width="25dp" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="200dp" android:layout_toRightOf="@+id/counter" android:contentDescription="@string/desc_list_item_icon" android:src="@drawable/navigation_collapse" android:visibility="gone" /> </RelativeLayout> 

    Und mit diesem Layout in Adapter-Klasse in getGroupView-Methode:

      @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { NavDrawerItem itemHeader = (NavDrawerItem) getGroup(groupPosition); LayoutInflater inflater = (LayoutInflater) this.context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = null; if (convertView == null) { view = (View) inflater.inflate(R.layout.drawer_header_item, null); } else { view = convertView; } ImageView icon = (ImageView) view.findViewById(R.id.icon); if (itemHeader.isIconVisible()) { icon.setImageResource(itemHeader.getIcon()); } else { icon.setVisibility(View.GONE); } TextView textTitle = (TextView) view.findViewById(R.id.title); textTitle.setText(" " + itemHeader.getTitle()); TextView textCount = (TextView) view.findViewById(R.id.counter); if (itemHeader.getCounterVisibility()) { textCount.setText(itemHeader.getCount()); } else { textCount.setVisibility(View.GONE); } ImageView iconExpand = (ImageView) view.findViewById(R.id.icon_expand); ImageView iconCollapse = (ImageView) view .findViewById(R.id.icon_collapse); if (isExpanded) { iconExpand.setVisibility(View.GONE); iconCollapse.setVisibility(View.VISIBLE); } else { iconExpand.setVisibility(View.VISIBLE); iconCollapse.setVisibility(View.GONE); } if (getChildrenCount(groupPosition) == 0) { iconExpand.setVisibility(View.GONE); iconCollapse.setVisibility(View.GONE); } return view; } 

    Mit dieser Methode können Sie die Position des expand / collapse-Symbols richtig einstellen. ich hoffe es hilft.

    Expandable list view move group icon indicator to right

    Die setIndicatorBounds(int left, int right) werden verwendet, um die Indikatorgrenzen für die Gruppenansicht einer expandable setIndicatorBounds(int left, int right) .

     explvList.setIndicatorBounds(width-GetDipsFromPixel(35), width-GetDipsFromPixel(5)); 

    Hier bedeutet Breite die Gerätebreite.

     /Convert pixel to dip public int GetDipsFromPixel(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } 

    FYI : Die Breite ist gleich der in der setBounds method angegebenen Breite. Hier in meinem Snippet ist es 35.Weitere klug ist die Ikone gestört. Für weitere Details können Sie hier besuchen

    https://developer.android.com/reference/android/widget/ExpandableListView.html#setIndicatorBounds(int , int)

    https://developer.android.com/reference/android/widget/ExpandableListView.html#setIndicatorBoundsRelative(int , int)

    Machen Sie Ihr eigenes Header-Layout und setGroupIndicator (null)

    Mehr hier: http://www.captechconsulting.com/blog/matt-serone/android-expandablelistview-magic

    Wenn es in Fragment ist – onViewCreated ()

      ViewTreeObserver vto = Expnlist.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Expnlist.setIndicatorBounds(Expnlist.getMeasuredWidth() - 80, Expnlist.getMeasuredWidth()); } }); 

    Seine Werke für mich !. Prost!

     FIX: 

    Sie haben eine neue Methode in der API 18 und eine Methode namens setIndicatorBoundsRelative (int, int) eingeführt. Sie sollten auf Android-Version zu überprüfen und verwenden Sie die entsprechenden Methoden mit der API's:

     expListView = (ExpandableListView) v.findViewById(R.id.laptop_list); metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); width = metrics.widthPixels; if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { expListView.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10)); } else { expListView.setIndicatorBoundsRelative(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10)); } 

    Schreibe diesen Code in

    Erweiterbarer Basisadapter @Override public View getGroupView (int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {ImageView imgs;

      String headerTitle = (String) getGroup(groupPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.list_group, null); } TextView lblListHeader = (TextView) convertView .findViewById(R.id.lblListHeader); imgs = (ImageView) convertView .findViewById(R.id.img_list); lblListHeader.setTypeface(null, Typeface.BOLD); lblListHeader.setText(headerTitle); if (isExpanded) { imgs.setImageResource(R.drawable.up_arrow); } else { imgs.setImageResource(R.drawable.downs_arrow); } return convertView; } 
    • Listenpunkt

    Die setIndicatorBounds (int left, int right) werden verwendet, um die Indikatorgrenzen für die Gruppenansicht einer erweiterbaren Listenansicht festzulegen.

    ExplvList.setIndicatorBounds (width-GetDipsFromPixel (35), width-GetDipsFromPixel (5));

    Hier bedeutet Breite die Gerätebreite.

    // Konvertieren Sie Pixel zum Dip

     public int GetDipsFromPixel(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } 

    Versuchen Sie dies … diesen Code für die Anpassung der ExpandableList Gruppe Indikator in die rechte Seite der Ansicht.

     private ExpandableListView expandableListView; DisplayMetrics metrics; int width; metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); width = metrics.widthPixels; expandableListView = (ExpandableListView) findViewById(R.id.expandableListView1); expandableListView.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10)); 

    Und nennen Sie diese Methode,

     public int GetDipsFromPixel(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } 

    Das Ergebnis ist.. ExpandableList rechte Seitengruppe Indikator

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.