Как отформатировать активность из другого мероприятия с помощью опций меню

Привет, я новичок в Android, и я хочу изменить размер текста и текстовое изображение. Цвет активности из параметров меню. Я не знаю, как это сделать.

Я создал пункт меню, подобный этому

<item android:id="@+id/menu_item_share" android:title="Share" android:showAsAction="ifRoom|withText" android:orderInCategory="100" app:actionProviderClass="android.support.v7.widget.ShareActionProvider" /> <item android:id="@+id/display" android:orderInCategory="100" android:showAsAction="ifRoom|withText" android:title="Display Option" android:actionLayout="@layout/custom_setting" /> 

Когда я нажимаю опцию «Экран» из текущего варианта меню «макет», новый макет должен быть вызван .. в этом макете, который я создал, кнопка «Две кнопки одна» – « Плюс», а другая – « Минус-кнопка», и я хочу, чтобы эти кнопки вносили изменения в предыдущий макет ,

Когда я нажимаю кнопку «плюс», текст текстового вида хочет быть «Изменить», и когда я нажимаю кнопку «Минус», размер «Размер текста» уменьшен.

Пользовательский макет кода, когда был выбран пункт меню

 <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.example.aeiltech.sidd.CustomSetting" android:background="@mipmap/bg"> <ImageButton android:layout_width="50dp" android:layout_height="40dp" android:background="@drawable/close" android:layout_above="@+id/textView" android:layout_toRightOf="@+id/minus" android:layout_toEndOf="@+id/minus" android:id="@+id/close" /> <ImageButton android:layout_width="50dp" android:layout_height="40dp" android:background="@drawable/plusign" android:layout_marginTop="110dp" android:id="@+id/plus" android:layout_alignParentTop="true" android:layout_alignLeft="@+id/textView" android:layout_alignStart="@+id/textView" /> <ImageButton android:layout_width="50dp" android:layout_height="40dp" android:background="@drawable/minusign" android:id="@+id/minus" android:layout_alignTop="@+id/plus" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Change Text Size" android:id="@+id/textView" android:layout_above="@+id/minus" android:layout_centerHorizontal="true" android:textColor="#FFFFFF" /> </RelativeLayout> 

DetailActivity (эта активность имеет текстовое представление)

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.detail_activity); detailtext= (TextView) findViewById(R.id.detail); dbHelper = new SqlLiteDbHelper(this); try { dbHelper.openDataBase(); } catch (SQLException e) { e.printStackTrace(); } sqLiteDatabase = dbHelper.getReadableDatabase(); cursor=dbHelper.getdetails(sqLiteDatabase, selectedData); if(cursor.moveToFirst()) { detailtext.setText(cursor.getString(0)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_detail, menu); MenuItem shareItem = menu.findItem(R.id.menu_item_share); mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (id==R.id.display_option) { LayoutInflater layoutInflater= (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); layoutInflater.inflate(R.layout.custom_setting,null); } return super.onOptionsItemSelected(item); } 

Чтобы помочь пояснить, этот вопрос является тем же приложением и автором, что и при сбое приложения при попытке изменить текст в текстовом режиме, нажав кнопку

Отобразите новый макет в виде диалогового окна. Идея состоит в том, чтобы показать параметр увеличения / уменьшения в виде всплывающего окна DialogFragment. Вы можете увеличить / уменьшить размер из всплывающего окна. Когда всплывающее окно отклоняет выбранный размер, он устанавливается в TextView в вашей деятельности.

MainActivity.java

 public class MainActivity extends AppCompatActivity { public static int updatedSize; TextView greetingText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); greetingText = (TextView)findViewById(R.id.hello_world_text); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { mycustomLayout(); return true; } return super.onOptionsItemSelected(item); } public void mycustomLayout(){ FragmentManager manager = getFragmentManager(); PopUp popUp = new PopUp(new FragmentDismissHandler()); popUp.show(manager,"POPUP"); } public void refreshText(){ if( updatedSize>0) greetingText.setTextSize(updatedSize); } private class FragmentDismissHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); refreshText(); } } 

}

activity_main.xml

 <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/hello_world_text" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

PopUp.java (настраиваемый макет как DialogFragment)

 public class PopUp extends DialogFragment implements View.OnClickListener{ Button increase,decrease,set; TextView sizeOfText; static int size; Handler handler; public PopUp(Handler handler) { this.handler = handler; } public PopUp(){ } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment getDialog().setTitle("change text size"); View view = inflater.inflate(R.layout.my_custom_layout, container, false); increase = (Button)view.findViewById(R.id.inc); increase.setOnClickListener(this); decrease = (Button)view.findViewById(R.id.dec); decrease.setOnClickListener(this); sizeOfText = (TextView)view.findViewById(R.id.size_text); sizeOfText.setText("text"); set = (Button)view.findViewById(R.id.ok); set.setOnClickListener(this); size = (int) sizeOfText.getTextSize(); return view; } @Override public void onClick(View view) { int id= view.getId(); if(id==R.id.inc){ size = size +1; sizeOfText.setText("text"); sizeOfText.setTextSize(size); } if(id== R.id.dec){ size = size - 1; sizeOfText.setText("text"); sizeOfText.setTextSize(size); } if(id== R.id.ok){ dismiss(); } } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); MainActivity.updatedSize = size; handler.sendEmptyMessage(0); } 

}

my_custom_layout.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" android:background="@android:color/white"> <Button android:id="@+id/inc" android:text="increase" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/dec" android:text="decrease" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/size_text" android:padding="20dp" android:textColor="@android:color/black" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/ok" android:text="set" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Иногда я отслеживаю поток активности пользователя, чтобы получить полную картину того, чего они пытаются достичь, и часто выбор дизайна, который они делают, основывается на ответах, которые они получают здесь, и поэтому вопрос о гнезде основан на решении, представленном в Предыдущий вопрос. Иногда это хорошо, в других случаях человек не понимает доступных вариантов дизайна.

Поэтому, чтобы ответить на вопрос:
Есть много способов сделать это (мой список не является исчерпывающим), я предлагаю несколько и демонстрирую их.

Вы можете использовать:

  1. фрагменты
  2. Общие предпочтения
  3. намерения
  4. Есть варианты изменения размера в меню

Я решил продемонстрировать фрагменты, поскольку это полезно для многих других вещей и полезного умения.

Создайте фрагмент со своими кнопками «плюс» и «минус», а не отдельным действием. Таким образом, фрагмент имеет прямой доступ к методам присоединенной деятельности.

Используйте свои параметры меню, чтобы вызвать метод showButtonOptions () вашей активности.

В рамках вашей деятельности:

 Fragment fragment; FrameLayout frameLayout; @Override protected void onCreate(Bundle savedInstanceState) { ..../ View view = this.findViewById(android.R.id.My_Activity); frameLayout = (FrameLayout) findViewById(R.id.fragFrame); ..../ } public void ChangeMyLayoutMethod(args){ ..../ //use args to make change. } public void showButtonOptions() { // Create new fragment and transaction fragment = new MyPlusAndMinusButtonFragment(); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fragFrame, fragment); fragmentTransaction.commit(); frameLayout.setVisibility(View.VISIBLE); } public void returnToActivity() { frameLayout.setVisibility(View.GONE); // To do manage your back stack. } 

В вашей деятельности xml

 <RelativeLayout ... or whatever ...> .../ Details of that activity <FrameLayout android:id="@+id/fragFrame" android:layout_below="@+id/wherever" android:layout_height="your choice" android:layout_width="your choice" android:layout_marginTop=".. etc" android:visibility="gone"> </RelativeLayout> , <RelativeLayout ... or whatever ...> .../ Details of that activity <FrameLayout android:id="@+id/fragFrame" android:layout_below="@+id/wherever" android:layout_height="your choice" android:layout_width="your choice" android:layout_marginTop=".. etc" android:visibility="gone"> </RelativeLayout> 

Создание фрагмента:

 public class MyPlusAndMinusButtonFragment extends Fragment { FragmentManager fragmentManager; ..../ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.My_Plus_And_Minus_Button_Fragment, container, false); fragmentManager = getFragmentManager(); ...../ return view; } //To Do // Manage button clicks// onClick(){ // Call the parent's activity's // Cast this activity to type of parent activity. ((MyActivity) getActivity()).ChangeMyLayoutMethod(args); } 

Макет фрагмента, My_Plus_And_Minus_Button_Fragment.xml:

 <FrameLayout .....> <RelativeLayout ....> <ImageButtons etc... ..../ </RelativeLayout> </FrameLayout> 

Как и в большинстве решений по разработке программного обеспечения, может быть много правильных решений, некоторые из них лучше других, некоторые из них – только вопрос предпочтительного выбора дизайна. Пока у нас нет вариантов, у нас нет выбора.

Пытаться

 @Override public boolean onOptionsItemSelected(MenuItem item) { if (id==R.id.display_option) { setContentView(R.layout.YOUR_LAYOUT) } return super.onOptionsItemSelected(item); } 
  @Override public boolean onOptionsItemSelected(MenuItem item) { if (id==R.id.display_option) { myCustomLayout(); } return super.onOptionsItemSelected(item); } public void myCustomLayout(){ LinearLayout ll = new LinearLayout(getActivity()); ll.setOrientation(LinearLayout.VERTICAL); View customView = LayoutInflater.from(getActivity()).inflate(R.layout.my_custom_layout,null,false); ll.addView(customView); parentView.addView(ll); // parentView is a layout in your activity xml; } 

Попробуйте это. Надеюсь, это сработает.

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } 

// OnOptionItemSelected

  @Override public boolean OnOptionItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_item_share: Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_LONG).show(); return true; default: return super.onOptionsItemSelected(item); } } 
Intereting Posts
Как отображать легенду на правой стороне piechart в ахартайнгине Как открыть Google Play Store прямо из приложения для Android? Несколько фрагментов с разным расширяемым списком для одних и тех же данных Анимация увеличения через центр изображения в Android с помощью xml Android SQLite удаляет определенную строку из базы данных Добавить изображение в приложение «Сообщения» на Android Почему мое приложение не совместимо с Nexus 7 в Google Play? Синяя точка и круг не отображаются в MyLocation с использованием сплайсированного аффилированного местоположения api Android Studio INSTALL_FAILED_DEXOPT и INSTALL_FAILED_UID_CHANGED при запуске проекта Как узнать, включены ли «Мобильные сетевые данные» (даже при подключении через WiFi)? Проблема автокомплектаTextView на потерянном фокусе Панель инструментов с иммерсивным полноэкранным режимом API Gears или HTML5 Location на Android 1.5 Android: есть ли способ изменить высоту кнопки переключателя? Как добиться плавной анимации маркера местоположения в android на карте google?