setVisibility (View.VISIBLE) funktioniert nicht immer. Ideen?

Ich versuche, ein paar versteckte Tasten (mit setVisibility(View.VISIBLE) , innerhalb eines RelativeLayout ) zu zeigen, aber es funktioniert nicht immer. Die Schaltfläche zeigt OK auf einem Galaxy Tab 10.1 "aber nicht in einer kleineren Tablette (nicht sicher, welches Modell), noch auf einem Android 4.0 Emulator.

Ich habe zufällig entdeckt, dass für einen bestimmten TextView t der folgende Code die Tasten sichtbar macht:

  • Konvertieren von Bitmap-Array in YUV (YCbCr NV21)
  • Verfolgen Sie nicht Text in Android TextView in der Abkürzung
  • Aktivitätsübergang nicht durchgeführt (Lollipop)
  • Firebase Analytics Upload Verzögerung
  • Ich bekomme seltsamen Fehler auf Android-Studio
  • Entwickleroptionen verschwinden aus Einstellungen
  •  t.setText(t.getText()); ... button.setVisibility(View.VISIBLE); 

    t befindet sich im selben RelativeLayout , ist aber nicht mit den Tasten verknüpft (ihre Standorte sind unabhängig und nicht überlappend).

    Bearbeiten : Falls irgendwelche Android dev das aufspüren wollen …

    Ich konnte den Code auf das folgende Layout reduzieren, das das Problem auf einem Android 4.0.3 Emulator zeigt, aber kein Galaxy Tab. Ich habe festgestellt, dass ich eine SurfaceView oder das Problem nicht auftritt (zB ändern Sie es in TextView und das Problem verschwindet).

     <?xml version="1.0" encoding="utf-8"?> <!-- layout/test.xml --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativeLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/mapCtrl" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/bottomPanel" android:text="Placeholder" android:layout_marginTop="18dip" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/map_mode_title" /> <!--=================================================--> <!-- Bottom bar: current road name and current speed --> <LinearLayout android:id="@+id/bottomPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#f228" android:orientation="horizontal" android:textColor="#ffff" > <Button android:id="@+id/btnNavMode" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="3dip" android:textColor="#fff" android:text="Switch to\nNav Mode" /> <RelativeLayout android:id="@+id/currentStreetPanel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onClick" android:clickable="true" android:orientation="vertical" > <TextView android:id="@+id/currentStreetHdg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Current street" android:textColor="#fff" android:textSize="10dip" /> <TextView android:id="@+id/currentStreet" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/currentStreetHdg" android:layout_marginTop="-8dip" android:singleLine="true" android:text="Current street" android:textColor="#fff" android:textSize="30dip" /> </RelativeLayout> <RelativeLayout android:id="@+id/RelativeLayout2" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#ff606060" android:orientation="vertical" > <TextView android:id="@+id/yourSpeedHdg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="3dip" android:text="Your speed" android:textColor="#fff" android:textSize="10dip" /> <TextView android:id="@+id/speed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/yourSpeedHdg" android:layout_marginLeft="3dip" android:layout_marginTop="-8dip" android:text="0" android:textColor="#fff" android:textSize="30dip" /> <TextView android:id="@+id/speedUnit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/speed" android:layout_marginLeft="5dip" android:layout_toRightOf="@+id/speed" android:text="kph" android:textColor="#fff" android:textSize="18dip" /> </RelativeLayout> </LinearLayout> <!--================--> <!-- On-map buttons --> <Button android:id="@+id/btnClearRoute" android:background="#F00" android:textColor="#fff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Clear\nroute"/> <ZoomControls android:id="@+id/zoomControls" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/mapCtrl" android:layout_centerHorizontal="true" android:layout_marginBottom="-25dip" android:orientation="horizontal" /> <Button android:id="@+id/btnFindRoute" android:layout_width="100dip" android:layout_height="wrap_content" android:layout_alignBottom="@+id/mapCtrl" android:layout_alignParentRight="true" android:layout_marginRight="2dip" android:layout_marginBottom="65dip" android:text="Route to selected location" android:textSize="17dip"/> <Button android:id="@+id/btnUnselect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/btnFindRoute" android:layout_alignTop="@+id/btnFindRoute" android:layout_alignParentLeft="true" android:layout_marginLeft="2dip" android:text="Unselect" /> <LinearLayout android:id="@+id/showMePanel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btnFindRoute" android:layout_alignRight="@+id/btnFindRoute" android:layout_alignLeft="@+id/btnFindRoute" android:padding="4dip" android:background="#bbbb" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show me..." android:textColor="#fff"/> <Button android:id="@+id/btnShowVehicle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="My car"/> <Button android:id="@+id/btnShowRoute" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="The route"/> <Button android:id="@+id/btnShowDestination" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Destination"/> <Button android:id="@+id/btnShowMap" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="The map"/> </LinearLayout> </RelativeLayout> 

    Die Aktivitätsklasse schaltet einfach die Sichtbarkeit der beiden Schaltflächen ein, wenn eine der Schaltflächen angeklickt wird. Wieder, auf einigen Geräten funktioniert es, auf andere ist es nicht.

     package mentor.simplegps; import android.app.*; import android.os.Bundle; import android.view.*; import android.widget.*; public class TestActivity extends Activity implements View.OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.test); boilerplate(); setVisibilities(); } Button _btnShowMap, _btnShowVehicle, _btnShowRoute, _btnShowDestination; Button _btnUnselect, _btnFindRoute, _btnNavMode; TextView _title; void boilerplate() { _btnUnselect = attachBtn(R.id.btnUnselect); _btnShowMap = attachBtn(R.id.btnShowMap); _btnShowVehicle = attachBtn(R.id.btnShowVehicle); _btnShowRoute = attachBtn(R.id.btnShowRoute); _btnShowDestination = attachBtn(R.id.btnShowDestination); _btnFindRoute = attachBtn(R.id.btnFindRoute); _btnNavMode = attachBtn(R.id.btnNavMode); _title = (TextView)findViewById(R.id.title); } private Button attachBtn(int btnId) { Button b = (Button)findViewById(btnId); b.setOnClickListener(this); return b; } boolean haveSel; public void onClick(View v) { haveSel = !haveSel; setVisibilities(); } void setVisibilities() { _btnFindRoute.setVisibility(haveSel ? View.VISIBLE : View.INVISIBLE); _btnUnselect.setVisibility (haveSel ? View.VISIBLE : View.INVISIBLE); // Fixes the problem //_title.setText(_title.getText()); } } 

  • Kamera funktioniert nicht bei der Verwendung von Cache Uri als MediaStore.EXTRA_OUTPUT
  • Erstellen von XHDPI, HDPI, MDPI, LDPI Bilder in Photoshop für Android
  • Legen Sie das Fragment vor der Navigationschublade ein
  • Eclipse Indigo - Kann das Android ADT Plugin nicht installieren
  • Beim Extrahieren von adt-bundle-windows-x86_64-20140702 dieser Fehler von Windows 8
  • Ist es möglich, den Chromium Browser auf Android laufen zu lassen?
  • 5 Solutions collect form web for “setVisibility (View.VISIBLE) funktioniert nicht immer. Ideen?”

    SurfaceView ist der einzige Schuldige (natürlich gilt das auch für GLSurfaceView, RSSurfaceView und VideoView, die alle von SurfaceView erbt). Es macht viele verrückte Verhaltensweisen, wenn es um andere Ansichten geht. Spielen mit View.setVisibility () ist eines dieser Probleme. Klar, SurfaceView wurde nicht entworfen, um mit anderen Ansichten verwendet werden (obwohl die offizielle doc sagt, es sollte sein), sondern als Standalone-Ansicht für Videos, Spiele oder OpenGL-Sachen.

    Für die Sichtbarkeit Problem, habe ich festgestellt, dass mit View.GONE anstelle von View.INVISIBLE lösen es. Wenn du GONE nicht benutzen willst, versuchst du den Fokus zum Beispiel (und zurück zu dem, der zuvor fokussiert hatte) zu ändern oder andere Zustände zu ändern. Das Ziel ist es, das zugrunde liegende UI-System irgendwie aufzuwecken.

    Kurz gesagt, wenn etwas seltsames passiert mit Ihren Ansichten und Sie haben eine SurfaceView (oder Unterklasse) irgendwo, versuchen Sie es mit etwas anderes zu ersetzen, so dass Sie nicht verlieren Stunden suchen, was Sie falsch machen, wenn Sie es richtig machen (und keine falschen Überzeugungen). Auf diese Weise wissen Sie, SurfaceView ist schuld und Sie können es mit schönen Kommentaren hacken, um es ohne Qualen zu pissen.

    Für den Rekord: Ich hatte dieses Problem, versuchte ein paar zufällige Sachen (Danke Alex!), Und in meinem Fall, was es löschte, war es zu sehen, seekBar.requestLayout() direkt nach dem SetVisible auf der sehr seekbar, die sich weigerte zu zeigen.

    In meinem Fall View.VISIBLE/View.GONE funktionierte nicht immer. Als ich meinen Toggle auf View.VISIBLE/View.INVISIBLE , fing es an, wie beabsichtigt zu arbeiten.

    Ich (ärgerlich) hatte ähnliche Schwierigkeiten mit einem Knopf auf einer SurfaceView Vorschau und musste den Button in eine RelativeLayout setzen und die RelativeLayout SICHTBAR / UNSICHTBAR machen. Vielleicht lohnt sich ein Schuss für alle anderen mit dem gleichen Problem.

    … Und ich musste auch programmgesteuert das Layout anrufen: buttonLayout.bringToFront () direkt nach findViewById.

    Warum machst du nicht einen booleschen Wert, den du kontrollierst, um sicherzustellen, dass die Schaltflächen nicht angezeigt werden, wenn du nicht willst und umgekehrt. Etwas wie das:

     boolean val = false; //here would be your other code //then here could be a method that checks the value public void checkVal(){ if(val){ button.setVisibility(View.VISIBLE); } else { button.setVisibility(View.INVISIBLE); } } 

    Ich bin mir nicht sicher, ob es Ihr Layout seit ich havent gesehen die App läuft, aber es könnte am einfachsten sein, wenn Sie nur Ihre Schaltflächen Sichtbarkeit in der OnClickListener wie folgt geändert:

     button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { //other stuff if(!button2.isVisible()){ button2.setVisibility(View.VISIBLE); button.setVisibilty(View.INVISIBLE); } } 

    Und dann machst du einfach das Gegenteil in deinem Button2 Setup. Ich bin mir nicht sicher, ob das hilft, aber ich hoffe es tut 🙂

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