Ich versuche ein benutzerdefiniertes radioogroup Layout wie im folgenden Bild zu erstellen. Ich habe fast 8-10 Zeilen dafür. Also habe ich ein linear layout
vorbereitet, das eine horizontale Ausrichtung hat und die imageview
, textview
und radiobutton
programmatisch hinzugefügt hat.
Wenn ich also ein radio button
anchecke, sollten die anderen Optionsfelder automatisch deaktiviert werden. Bevor ich zu dieser Aufgabe selbst gehe, habe ich ein anderes Problem, dass, wenn meine Optionsfelder einmal überprüft werden, der Optionsfeld nicht deaktivierbar ist, obwohl auf sie geklickt wurde. Unten ist mein Code.
Ich habe beobachtet, indem ich Logbücher geführt habe. Das Steuerelement gibt onCheckedChanged () zum ersten Mal ein, wenn diese überprüft werden, aber nicht, wenn es nicht markiert ist. Ich frage mich, wie diese nicht kontrollierbar sind.
ODER Gemäß meiner Anforderung habe ich noch eine Idee, dieses Layout vorzubereiten, wie ich ein weiteres Layout für die Zeile in xml vorbereite. Dann 10 Mal die Sicht aufblasen. Aber dann auch, wie kann ich nur einen Radio-Knopf überprüfen, so dass andere ausgewählte deaktiviert wird. Kann mir bitte jemand vorschlagen, wie man diese Art von Radiogruppe am besten erreicht?
Hinweis: Ich habe meinen obigen Code beibehalten, um zu zeigen, was ich versucht habe. Wenn es völlig falsch ist, bitte gehen Sie einfach und bitte schlagen Sie mir vor, wie man das erledigt.
Nach meiner Erfahrung ist es ein bisschen ein Unruhestifter, mit diesen angepassten RadioGroups zu arbeiten. Ich habe dir einen Code vorbereitet, der mein Ansatz ist, um das zu lösen, was du erreichen willst. Hoffe es funktioniert für dich!
Zuerst müssen Sie diese Funktion in Ihrem onCreate () (oder wo auch immer Sie die Ansichten erstellen) aufrufen
%Vor%Die Klasse sollte
sein %Vor%Und das xml zum aufblasen, etwas wie:
%Vor% Ein bisschen zu spät, um zu antworten, aber ich treffe mich mit dem gleichen Problem und aus Frustration habe ich eine neue Klasse namens RadioGroupPlus
geschrieben, um dieses Problem zu lösen, und ich wollte teilen.
Das Repo finden Sie hier: Ссылка
Fügen Sie die Bibliothek in Ihrer obersten Ebene build.gradle
:
Fügen Sie in Ihrem app/build.gradle
dies als Abhängigkeit hinzu:
Umschließen Sie Ihr benutzerdefiniertes Layout in Ihrer XML-Datei mit <worker8.com.github.radiogroupplus.RadioGroupPlus
, beispielsweise:
Ich lasse die Details absichtlich weg, damit sie leichter zu lesen sind. Ich habe mehr Informationen darüber geschrieben, wie man RadioGroupPlus
in der README
Seite benutzt. Außerdem schreibe ich auch ein einfaches Beispiel, wie man es benutzt. Wenn Sie mehr wissen möchten, können Sie mehr im RadioGroupPlus-Repo erfahren.
Ich hoffe, es hilft!
Der schwierige Teil ist, dass die Schaltfläche auf der rechten Seite sein soll.
Um dies zu tun, löschte ich die ursprüngliche Schaltfläche und setzte die rechte Schaltfläche als Schaltfläche
Nichts für die Linke drawbar zu sagen.
Und das ist der Code:
%Vor% Ich bearbeitet das Layout Entfernen des zweiten Teils, der für Ihren Zweck nutzlos war.
Wenn Sie sich das Layout ansehen, werden Sie sehen, was der Trick ist, um die Schaltfläche auf der rechten Seite zu platzieren.
Dies kann auch im Code erfolgen, wenn Sie das Layout nicht verwenden möchten (warum?)
Bei Verwendung meines Layouts (ohne die Notwendigkeit einer Cusom-Klasse) wäre das Ergebnis ...
Ganz ähnlich wie Ihr Ziel, nicht wahr?
Die komplizierten Zeilen, die Sie in Ihrem Code replizieren sollten (wieder, warum?) Sind:
Es ist nicht schwer, Ihre benutzerdefinierte Klasse RadioGroup entsprechend Ihren Anforderungen zu implementieren. Sie können auch einen benutzerdefinierten RadioButton implementieren. Wenn benutzerdefinierte Komponenten definiert sind, können Einschränkungen von Standardkomponenten einfacher erweitert und umgangen werden.
Ich habe den Prozess der Erstellung einer benutzerdefinierten RadioGroup und eines benutzerdefinierten RadioButton in dieses Tutorial . Außerdem habe ich meinen Code zu Github hochgeladen.
Antwort von @Junior Buckeridge hat für mich gearbeitet. Ich möchte nur meine 2 Cent dazu hinzufügen. Falls Sie anklickbare Ansichten in Ihrem linearen Layout haben, stellen Sie sicher, dass Sie hinzufügen android: demcendantFocusability="blocksDescendants" zu Ihrem linearen Layout und android: focusable="false" zu Ihrer Ansicht (Kann eine Taste, Radio Button usw. sein)
Tags und Links android radio-button radio-group