Смена ImageView через locale
Как осуществить смену ImageView после переключения языка приложения?
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DivisionsFragment">
<ImageView
android:id="@+id/buttonimi"
android:layout_width="match_parent"
android:layout_height="145dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/imi"
android:scaleType="fitCenter"
android:src="@drawable/imibuttonpic_ru"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/buttonien"
android:layout_width="match_parent"
android:layout_height="145dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/ien"
android:scaleType="fitCenter"
android:src="@drawable/ienbuttonpic_ru"
app:layout_constraintEnd_toEndOf="@id/buttonimi"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonimi" />
<ImageView
android:id="@+id/buttonfti"
android:layout_width="wrap_content"
android:layout_height="145dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/fti"
android:scaleType="fitCenter"
android:src="@drawable/ftibuttonpic_ru"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonien" />
<ImageView
android:id="@+id/buttonifkis"
android:layout_width="wrap_content"
android:layout_height="145dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/ifkis"
android:scaleType="fitCenter"
android:src="@drawable/ifkisbuttonpic_ru"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonfti" />
</android.support.constraint.ConstraintLayout>
Fragment
public class DivisionsFragment extends Fragment {
private static final String TAG = "DivisionsFragment";
View v;
ImageView imibutton;
ImageView ifkisbutton;
ImageView ienbutton;
ImageView ftibutton;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_divisions, container,false);
imibutton = (ImageView) v.findViewById(R.id.buttonimi);
imibutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImiFragment imiFragment = new ImiFragment();
FragmentManager manager = getFragmentManager();
manager.beginTransaction().replace(R.id.nav_host_fragment, imiFragment, imiFragment.getTag()).commit();
}
});
ifkisbutton = (ImageView) v.findViewById(R.id.buttonifkis);
ifkisbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IfkisFragment ifkisFragment = new IfkisFragment();
FragmentManager manager = getFragmentManager();
manager.beginTransaction().replace(R.id.nav_host_fragment, ifkisFragment, ifkisFragment.getTag()).commit();
}
});
ienbutton = (ImageView) v.findViewById(R.id.buttonien);
ienbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IenFragment ienFragment = new IenFragment();
FragmentManager manager = getFragmentManager();
manager.beginTransaction().replace(R.id.nav_host_fragment, ienFragment, ienFragment.getTag()).commit();
}
});
ftibutton = (ImageView) v.findViewById(R.id.buttonfti);
ftibutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FtiFragment ftiFragment = new FtiFragment();
FragmentManager manager = getFragmentManager();
manager.beginTransaction().replace(R.id.nav_host_fragment, ftiFragment, ftiFragment.getTag()).commit();
}
});
return v;
}
}
settings.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SettingsActivity">
<TextView
android:id="@+id/locale_text"
android:layout_width="274dp"
android:layout_height="23dp"
android:text="@string/set_locale"
android:textAlignment="center"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/locale_image" />
<ImageView
android:id="@+id/locale_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:adjustViewBounds="true"
android:tint="@color/svfu_accent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/language_96px"
android:contentDescription="@string/set_locale" />
<Button
android:id="@+id/button_en"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="69dp"
android:layout_marginTop="73dp"
android:layout_marginEnd="65dp"
android:text="@string/english"
app:layout_constraintEnd_toStartOf="@+id/button_ru"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/locale_text" />
<Button
android:id="@+id/button_ru"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="65dp"
android:layout_marginTop="73dp"
android:layout_marginEnd="64dp"
android:text="@string/russian"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/button_en"
app:layout_constraintTop_toBottomOf="@+id/locale_text" />
</android.support.constraint.ConstraintLayout>
SettingsActivity
public class SettingsActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_menu);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Button ru_btn = (Button) findViewById(R.id.button_ru);
ru_btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
System.out.println("ru_btn.click");
Locale locale = new Locale("ru");
changeLocale(locale);
}
});
Button en_btn = (Button) findViewById(R.id.button_en);
en_btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
System.out.println("en_btn.click");
Locale locale = new Locale("en");
changeLocale(locale);
}
});
}
private void changeLocale(Locale locale)
{
Locale.setDefault(locale);
Configuration configuration = new Configuration();
configuration.setLocale(locale);
getBaseContext().getResources()
.updateConfiguration(configuration,
getBaseContext()
.getResources()
.getDisplayMetrics());
setTitle(R.string.app_name);
}
}
Ответы (1 шт):
Если я правильно понял то у вас эти картинки используются для imageView:
@drawable/ftibuttonpic_ru
@drawable/imibuttonpic_ru
@drawable/ifkisbuttonpic_ru
и если это так, то такое распределение картинок. Вам нужно создать поддиректории в папке @drawable которые будут соответствовать коду языка ( en,ru...), типа такого:
Дальше вам нужно расположить там картинки. Этот процесс называется локализацией приложения, и про него можно почитать в документации. Для того чтобы отловить изменение языка, нужно брать код языка:
Locale.getDefault().language
этот метод вернет код языка, например:
en
дальше вы можете брать картинку из drawable директории согласно выбранному языку. На странице настроек было бы неплохо производить запись в настройки приложения выбранный язык, чтобы можно было тащить эти данные отовсюду.
P.S. Вопрос максимально непонятный лично мне кажется)) Если бы вы добавили уточняющей информации то можно было бы на него ответить точнее.
