[JAVA] Ändern oder Ausblenden der Schaltfläche und des EditText auf dem Bildschirm für jede Seite

Einführung

device.gif

Ich möchte die Größe von EditText, Schaltflächen usw. für jeden Bildschirm wie folgt ändern! Ich möchte mit dem Verhältnis des Bildschirms erstellen! : clap_tone2:

Denkweise

Um das Layout für jeden Bildschirm zu ändern, dachte ich, ich sollte eine Layoutdatei für jedes Fragment durch Tablayout erstellen und Elemente (diesmal EditText und Button) für jede Layoutdatei platzieren, diesmal ist es jedoch eine andere Methode. .. Dieses Mal werden wir diese in der Hauptaktivität implementieren, die die Quelle für den Aufruf von Fragment ist. Hier möchte ich zwei Verdienste vorstellen, die ich in Betracht gezogen habe.

Der Erste

Der erste Vorteil ist, dass es durch das übergeordnete Layout behoben werden kann? ?? : aufzeigen: (Wenn ich in meiner Implementierung ListView, RecyclerView usw. in Fragment implementiert habe, wurde das Element (diesmal EditText und Button) durch Scrollen verschoben.)

Der Zweite

Der zweite Vorteil ist, dass es nicht redundant wird, da es nicht in jeder Fragment-Layoutdatei beschrieben werden muss. ?? : clap_tone2: Ich denke das ist eine gute Sache. : sonnig:

Implementierung

Zusammenarbeit zwischen Tablayout und Viewpager

Verknüpfen Sie zunächst Tablayout und Viewpager. Dieses Mal werden wir es mit 5 Registerkarten implementieren. Bereiten Sie dann 5 Fragmente und 5 Layoutdateien vor, die in sie aufgenommen werden sollen.

5 Layoutdateien

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 Bitte bereiten Sie 5 Layout-Dateien wie diese vor.

5 Fragmentdateien

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.Bitte wechseln Sie zu layout1-5
        return view;
    }
}

Fragment1.java Fragment2.java Fragment3.java Fragment4.java Fragment5.java Bitte bereiten Sie 5 auf diese Weise vor.

adapter

Bringen Sie Tablayout und 5 Fragmente mit Adapter an.

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

Lassen Sie die Sätze, die Sie bisher geschrieben haben, hauptsächlich verarbeiten

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);//Array aus XML-Datei abrufen
        tabLayout = (TabLayout) findViewById(R.id.tabs);//Holen Sie sich die Tablayout-ID
        mPager = (ViewPager) findViewById(R.id.viewpager);//ID des Viewpagers abrufen
        pagerAdapter = new Viewpager_Adapter(getSupportFragmentManager(), tabs_names);//Erstellen Sie einen Adapter für das erstellte Fragment und den Viewpager
        mPager.setAdapter(pagerAdapter);//Fragment im Viewpager festlegen
        mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));//Machen Sie es möglich, sich auch mit Tablayout zu bewegen
        tabLayout.setupWithViewPager(mPager);//Zusammenarbeit zwischen Tablayout und 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>

Nachdem die Vorarbeiten abgeschlossen sind, möchte ich das Layoutelement dynamisch ändern, was der Zweck dieser Zeit ist.

Hauptthema

Button- und EditText-Deklarationen, um dynamisch zu werden

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" />
<!------------------------Von hier aus hinzufügen------------------------------->
    <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="Kommentieren" />
        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:text="Senden" />
    </LinearLayout>
<!------------------------Bisher---------------------------------->
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Der Punkt ist, dass die Breite und Höhe der Defalt 0dp sind. Dies liegt daran, dass es nicht von Anfang an angezeigt wird. Wenn Sie von Anfang an anzeigen möchten, setzen Sie hier 0dp auf einen beliebigen Wert.

Machen Sie es mit MainActivity dynamisch

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);//Array aus XML-Datei abrufen
        tabLayout = (TabLayout) findViewById(R.id.tabs);//Holen Sie sich die Tablayout-ID
        mPager = (ViewPager) findViewById(R.id.viewpager);//ID des Viewpagers abrufen
        pagerAdapter = new Viewpager_Adapter(getSupportFragmentManager(), tabs_names);//Erstellen Sie einen Adapter für das erstellte Fragment und den Viewpager
        mPager.setAdapter(pagerAdapter);//Fragment im Viewpager festlegen
        mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));//Machen Sie es möglich, sich auch mit Tablayout zu bewegen
        tabLayout.setupWithViewPager(mPager);//Zusammenarbeit zwischen Tablayout und Viewpager
/*-------------------------------------Von hier aus hinzufügen-----------------------------------------------------*/
        mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {//Geben Sie ein, wenn der Seitenwechsel erfolgt
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {//Beginnen Sie, wenn die Seite die Positionsnummer erreicht
                button = (Button)findViewById(R.id.button1);//ID bekommen
                editText = (EditText)findViewById(R.id.edittext1);//ID bekommen
                if (position == 0) {
                    editText.setLayoutParams(new LinearLayout.LayoutParams(0,0));//Vertikale und horizontale Einstellungen
                    button.setLayoutParams(new LinearLayout.LayoutParams(0,0));//Vertikale und horizontale Einstellungen
                } else if (position == 1) {
                    editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*0),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                    button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*10),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                } else if (position == 2){
                    editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*5),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                    button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*5),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                } else if (position == 3){
                    editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*8),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                    button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*2),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                } else if (position == 4){
                    editText.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*10),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                    button.setLayoutParams(new LinearLayout.LayoutParams((int)((linear_width/10)*0),getActionBarHeight()));//Vertikale und horizontale Einstellungen
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }

        });
    }

    @Override//Ermitteln Sie die Größe des LinearLayout(* Kann nicht mit onCreate durchgeführt werden)
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        linearLayout = (LinearLayout)findViewById(R.id.linear);
        linear_width = linearLayout.getWidth();
    }

    private int getActionBarHeight() {//Holen Sie sich einen festen Wert(Dieses Mal wird die Standardhöhe der Aktionsleiste abgerufen und zurückgegeben)
        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;
    }

/*---------------------------------------------------Bisher----------------------------------------------*/
}

Wenn sich die Seitenzahl ändert, wird die horizontale Länge des erfassten Bildschirms erfasst, in 10 unterteilt, und 7 wird EditText zugewiesen, und 3 wird Button zugewiesen. Und wenn Sie 0 ersetzen, verschwinden Button und EditText selbst.

Verweise

Viewpager, Fragment und 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 Bildschirmgröße abrufen http://qiita.com/a_nishimura/items/f557138b2d67b9e1877c http://tokin-kame.hatenablog.com/entry/2015/03/25/203907 Legen Sie die Größe von Button und EditText fest 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

Zusammenfassung

Dies ist der Code für diese Zeit. https://github.com/hisakioomae/Dynamic_Button_size_sample Vielleicht ist es nicht so, aber wenn Sie Bedenken haben, geben Sie uns bitte Ihre Meinung.

Recommended Posts

Ändern oder Ausblenden der Schaltfläche und des EditText auf dem Bildschirm für jede Seite
Ändern Sie die Verarbeitung, wenn Sie für jede Liste auf die Schaltfläche in RecyclerView klicken
[Schienen] Navigationsleiste und Überschriften nur auf der TOP-Seite ausblenden
Importieren Sie eine Instanz und verwenden Sie sie auf einem anderen Bildschirm
[Android] Ändern Sie den App-Namen und das App-Symbol für jeden Geschmack