[JAVA] Redimensionner ou masquer Button et EditText placés à l'écran pour chaque page

introduction

device.gif

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:

Façon de penser

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.

La première

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.)

La deuxième

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é:

la mise en oeuvre

Coopération entre tablayout et viewpager

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.

5 fichiers de mise en page

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.

5 fichiers Fragment

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];
    }
}

Laissez main traiter les phrases que vous avez écrites jusqu'à présent

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.

Sujet principal

Déclarations Button et EditText pour rendre dynamique

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.

Rendez-le dynamique avec MainActivity

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.

Les références

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

Résumé

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

Redimensionner ou masquer Button et EditText placés à l'écran pour chaque page
Modifier le traitement lorsque le bouton de RecyclerView est enfoncé pour chaque liste
[rails] Masquer la barre de navigation et les en-têtes uniquement sur la page TOP
Importez une instance et utilisez-la sur un autre écran
[Android] Modifiez le nom de l'application et l'icône de l'application pour chaque saveur