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