Je veux changer la taille de EditText, des boutons, etc. pour chaque écran comme ceci! Je veux créer avec le ratio de l'écran! : clap_tone2:
Pour changer la mise en page de chaque écran, j'ai pensé que je devais créer un fichier de mise en page pour chaque Fragment par tablayout et placer des éléments (EditText et Button cette fois) pour chaque fichier de mise en page, mais cette fois, c'est une méthode différente. .. Cette fois, nous les implémenterons dans l'activité principale, qui est la source de l'appel de Fragment. Ici, je voudrais présenter deux mérites que j'ai examinés.
Le premier mérite est qu'il peut être fixé par la mise en page parent? ?? : pointer vers le haut: (Dans mon implémentation, lorsque j'ai implémenté ListView, RecyclerView, etc. dans Fragment, l'élément (EditText et Button cette fois) déplacé par défilement.)
Le deuxième mérite est qu'il ne devient pas redondant car il n'a pas à être décrit dans chaque fichier de mise en page Fragment. ?? : clap_tone2: Je pense que c'est une bonne chose. : ensoleillé:
Commencez par lier tablayout et viewpager. Cette fois, nous allons l'implémenter avec 5 onglets. Ensuite, préparez 5 fragments et 5 fichiers de mise en page à y inclure.
layout/layout1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView1" />
</LinearLayout>
layout/layout1.xml layout/layout2.xml layout/layout3.xml layout/layout4.xml layout/layout5.xml Veuillez préparer 5 fichiers de mise en page comme celui-ci.
Fragment1.java
package jp.app.oomae.hisaki.dynamic_button_sample.Fragment;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import jp.app.oomae.hisaki.dynamic_button_sample.R;
public class Fragment1 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
View view = inflater.inflate(R.layout.layout1, container, false);//R.layout.Veuillez changer pour layout1-5
return view;
}
}
Fragment1.java Fragment2.java Fragment3.java Fragment4.java Fragment5.java Veuillez préparer 5 de cette manière.
adapter
Fixez la mise en page et 5 fragments avec l'adaptateur.
Viewpager_Adapter.java
package jp.app.oomae.hisaki.dynamic_button_sample;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import jp.app.oomae.hisaki.dynamic_button_sample.Fragment.Fragment1;
import jp.app.oomae.hisaki.dynamic_button_sample.Fragment.Fragment2;
import jp.app.oomae.hisaki.dynamic_button_sample.Fragment.Fragment3;
import jp.app.oomae.hisaki.dynamic_button_sample.Fragment.Fragment4;
import jp.app.oomae.hisaki.dynamic_button_sample.Fragment.Fragment5;
public class Viewpager_Adapter extends FragmentPagerAdapter {
int numberOfTabs;
private String tabTitles[];
public Viewpager_Adapter(FragmentManager fm, String[] tabTitles){
super(fm);
this.tabTitles = tabTitles;
numberOfTabs = tabTitles.length;
}
@Override public Fragment getItem(int position) {
switch (position){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
}
return null;
}
@Override public int getCount() {
return numberOfTabs;
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
}
MainActivity.java
package jp.app.oomae.hisaki.dynamic_button_sample;
import android.os.Build;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private ViewPager mPager;
private TabLayout tabLayout;
private Viewpager_Adapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] tabs_names = getResources().getStringArray(R.array.tabs);//Obtenir un tableau à partir d'un fichier xml
tabLayout = (TabLayout) findViewById(R.id.tabs);//Obtenir l'identifiant de la mise en page
mPager = (ViewPager) findViewById(R.id.viewpager);//Obtenir l'identifiant du viewpager
pagerAdapter = new Viewpager_Adapter(getSupportFragmentManager(), tabs_names);//Créer un adaptateur pour le fragment et le visualiseur créés
mPager.setAdapter(pagerAdapter);//Définir le fragment dans la visionneuse
mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));//Rendre possible de se déplacer même avec un tablayout
tabLayout.setupWithViewPager(mPager);//Coopération entre tablayout et viewpager
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="jp.app.oomae.hisaki.dynamic_button_sample.MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Maintenant que le travail de base est terminé, je voudrais changer dynamiquement l'élément de mise en page, ce qui est le but de cette fois.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="jp.app.oomae.hisaki.dynamic_button_sample.MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!------------------------Ajouter à partir d'ici------------------------------->
<LinearLayout
android:layout_gravity="bottom"
android:id="@+id/linear"
android:gravity="bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edittext1"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center"
android:hint="Commenter" />
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Envoyer" />
</LinearLayout>
<!------------------------Jusque là---------------------------------->
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Le fait est que la largeur et la hauteur de defalt sont de 0dp. C'est parce qu'il n'est pas affiché depuis le début. Si vous souhaitez afficher depuis le début, définissez ici 0dp sur n'importe quelle valeur.
MainActivity.java
package jp.app.oomae.hisaki.dynamic_button_sample;
import android.os.Build;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private ViewPager mPager;
private TabLayout tabLayout;
private Viewpager_Adapter pagerAdapter;
private LinearLayout linearLayout;
private int linear_width;
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] tabs_names = getResources().getStringArray(R.array.tabs);//Obtenir un tableau à partir d'un fichier xml
tabLayout = (TabLayout) findViewById(R.id.tabs);//Obtenir l'identifiant de la mise en page
mPager = (ViewPager) findViewById(R.id.viewpager);//Obtenir l'identifiant du viewpager
pagerAdapter = new Viewpager_Adapter(getSupportFragmentManager(), tabs_names);//Créer un adaptateur pour le fragment et le visualiseur créés
mPager.setAdapter(pagerAdapter);//Définir le fragment dans la visionneuse
mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));//Rendre possible de se déplacer même avec un tablayout
tabLayout.setupWithViewPager(mPager);//Coopération entre tablayout et viewpager
/*-------------------------------------Ajouter à partir d'ici-----------------------------------------------------*/
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {//Entrez lorsque le changement de page arrive
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {//Commencer lorsque la page atteint le numéro de position
button = (Button)findViewById(R.id.button1);//obtenir un identifiant
editText = (EditText)findViewById(R.id.edittext1);//obtenir un identifiant
if (position == 0) {
editText.setLayoutParams(new LinearLayout.LayoutParams(0,0));//Paramètres verticaux et horizontaux
button.setLayoutParams(new LinearLayout.LayoutParams(0,0));//Paramètres verticaux et horizontaux
} else if (position == 1) {
editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*0),getActionBarHeight()));//Paramètres verticaux et horizontaux
button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*10),getActionBarHeight()));//Paramètres verticaux et horizontaux
} else if (position == 2){
editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*5),getActionBarHeight()));//Paramètres verticaux et horizontaux
button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*5),getActionBarHeight()));//Paramètres verticaux et horizontaux
} else if (position == 3){
editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*8),getActionBarHeight()));//Paramètres verticaux et horizontaux
button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*2),getActionBarHeight()));//Paramètres verticaux et horizontaux
} else if (position == 4){
editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*10),getActionBarHeight()));//Paramètres verticaux et horizontaux
button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*0),getActionBarHeight()));//Paramètres verticaux et horizontaux
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override//Obtenir la taille du LinearLayout(* Ne peut pas être fait avec onCreate)
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
linearLayout = (LinearLayout)findViewById(R.id.linear);
linear_width = linearLayout.getWidth();
}
private int getActionBarHeight() {//Obtenez une valeur fixe(Cette fois, il obtient la hauteur par défaut de la barre d'action et la renvoie)
int actionBarHeight = getSupportActionBar().getHeight();
if (actionBarHeight != 0)
return actionBarHeight;
final TypedValue tv = new TypedValue();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
} else if (getTheme().resolveAttribute(jp.app.oomae.hisaki.dynamic_button_sample.R.attr.actionBarSize, tv, true))
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
return actionBarHeight;
}
/*---------------------------------------------------Jusque là----------------------------------------------*/
}
Lorsque le numéro de page change, la longueur horizontale de l'écran acquis est acquise, divisée en 10, et 7 sont affectés à EditText et 3 sont affectés à Button. Et si vous remplacez 0, Button et EditText lui-même disparaissent.
viewpager, Fragment et Tablayout http://notebook-t-0731.hatenablog.com/entry/2015/12/20/ViewPager%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8BActivity%E3%81%AEToolbar%E3%81%AE%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92Fragment%E3%81%94%E3%81%A8%E3%81%AB%E5%A4%89%E6%9B%B4 Obtenir la taille de l'écran http://qiita.com/a_nishimura/items/f557138b2d67b9e1877c http://tokin-kame.hatenablog.com/entry/2015/03/25/203907 Définir la taille de Button et EditText https://stackoverflow.com/questions/20964597/how-to-set-height-and-width-of-the-dynamic-button-created https://stackoverflow.com/questions/12301510/how-to-get-the-actionbar-height
Ceci est le code pour cette fois. https://github.com/hisakioomae/Dynamic_Button_size_sample Ce n'est peut-être pas le cas, mais si vous avez des inquiétudes, donnez-nous votre avis.
Recommended Posts