Używanie radioButtons do przełączania się między zdjęciami i używanie paska postępu, textView i paska wyszukiwania do zmiany krycia wybranego zdjęcia [duplikat]
Jestem studentem, który uczy się w tym roku Android Studio z Javą. W zeszłym tygodniu dowiedziałem się o pasku postępu, pasku wyszukiwania i przyciskach opcji. Moja praca domowa polega na używaniu przycisków radiowych do przełączania się między zdjęciami i używania paska postępu, textView (dla wartości procentowej) i paska wyszukiwania, aby zmienić krycie wybranego zdjęcia.
Próbowałem, jak mogłem, i kiedy patrzę na „projekt”, widzę pasek postępu, pasek wyszukiwania i widok tekstu i wszystko jest w porządku, ale kiedy uruchamiam aplikację (na SDK 19), radio przyciski nie zmieniają wybranego zdjęcia, a nawet nie widzę paska wyszukiwania, paska postępu i widoku tekstu.
Oto XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:background="@drawable/appbackground">
<ImageView
android:layout_width="318dp"
android:layout_height="353dp"
android:src="@drawable/avatar"
android:layout_gravity="center"
android:layout_marginBottom="200sp"/>
<ImageView
android:id="@+id/element"
android:layout_width="137dp"
android:layout_height="128dp"
android:layout_marginStart="135sp"
android:layout_marginTop="195sp"
android:src="@drawable/abc_vector_test"
android:elevation="2sp"/>
<RadioGroup
android:id="@+id/radioG"
android:layout_width="wrap_content"
android:layout_height="133dp"
android:layout_marginTop="400dp"
android:background="@drawable/background"
android:orientation="vertical">
<RadioButton
android:id="@+id/w"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Water"
android:textColor="#03A9F4" />
<RadioButton
android:id="@+id/e"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Earth"
android:textColor="#652F00" />
<RadioButton
android:id="@+id/f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Fire"
android:textColor="#FF5722" />
<RadioButton
android:id="@+id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Air"
android:textColor="#9C9C9C" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text"
android:text="50%"
android:gravity="center"
android:layout_marginTop="570sp"
android:textSize="40sp"/>
<ProgressBar
android:id="@+id/prog"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="625sp" />
<SeekBar
android:id="@+id/seek"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="650sp"
android:max="100"
android:progress="50"
android:thumb="@drawable/uncleiroh2" />
</FrameLayout>
a oto java:
package com.example.avatarphotos;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener, RadioGroup.OnCheckedChangeListener {
private ImageView Element;
private TextView textView;
private ProgressBar progressBar;
private RadioGroup radioGroup;
private SeekBar seekBar;
//private RadioButton air;
//private RadioButton earth;
//private RadioButton water;
//private RadioButton fire;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Element = findViewById(R.id.element);
textView=findViewById(R.id.text);
progressBar=findViewById(R.id.prog);
seekBar=findViewById(R.id.seek);
radioGroup=findViewById(R.id.radioG);
radioGroup.setOnCheckedChangeListener(this);
seekBar.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
progressBar.setProgress(i);
textView.setText(""+i+"%");
Element.setImageAlpha((int)(i/100.0*255));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case 0:
Element.setImageResource(R.drawable.water);
break;
case 1:
Element.setImageResource(R.drawable.earth);
break;
case 2:
Element.setImageResource(R.drawable.fire);
break;
case 3:
Element.setImageResource(R.drawable.air);
break;
}
}
}
zdjęcie projektu : aplikacja do projektowania : aplikacja i dobrze podczas pisania tego otrzymałem ten komunikat o błędzie, więc nie wiem, czy jest on naprawdę powiązany: komunikat o problemie
Odpowiedzi
Dlaczego nie spróbujesz zaktualizować do nowszej wersji ADB ADB (lub może zaktualizować całe Android Studio).
Wszystko to umieściłeś w pliku FrameLayout
z dużymi stałymi marginesami. Twoje brakujące widoki są prawdopodobnie poza ekranem ( android:layout_marginTop="625sp"
oznacza to, że znacznie je kompensujesz; również powinieneś użyć dp
). Powodem, dla którego działa w podglądzie, jest prawdopodobnie to, że podglądasz, jak by wyglądał na większym ekranie.
Zakładam, że zrobiłeś to, ponieważ w przeciwnym razie FrameLayout po prostu umieszcza wszystkie widoki jeden na drugim. Możesz rozwiązać ten problem, budując interfejs użytkownika za pomocą ConstraintLayout
lub kombinacji RelativeLayout
i LinearLayout
. Ustaw widoki względem siebie i ekranu, a nie przy dużych stałych przesunięciach.