2015-11-02 3 views
8

Привет я новичок в Android, и я хочу изменить TextView Размер и TextView Цвет деятельности из вариантов меню, я не знаю, как это сделатьКак форматировать деятельность от другой деятельности, используя опции меню

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

<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" /> 

Когда я Нажмите Display Option от текущего варианта компоновки меню нового формат хочет назвать .. в этом макете я создал Две кнопки один Plus Кнопка и другая Minus Button и я хочу, чтобы эти кнопки вносили изменения в предыдущий макет.

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

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

<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 (Эта активность имеет TextView)

@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); 
} 

Чтобы прояснить этот вопрос то же самое приложение, и автор, как это App Crash When Trying to Change textsize in textView by clicking on button

+2

textView.setTextColor (Color.RED); – activesince93

+1

Как надуть компоновку Когда Menuitem ** «DisplayOption» ** был запрограммирован –

ответ

6

дисплей новый макет в виде DialogFragment. Идея состоит в том, чтобы показать параметр увеличения/уменьшения в виде всплывающего окна 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> 
+0

i ПРИНИМАЕМ ВАШЕГО АНАСТА, НО АМЕРИРОВАННЫЙ ОГРАНИЧЕНИЕ ПЛЮС МИНУС МИНУС BUTTON WORK (т. Е.) После 5-6 щелчков плюс кнопка размер шрифта начал уменьшаться, а также так же, как и кнопка минуса @ sarath19 –

+0

Я просто помещаю 4 кнопки Красный, зеленый, синий так же, как я хочу изменить цвет Textview, как это сделать? –

+0

'color = sizeOfText.getCurrentTextColor(); if (id == R.id.red) { // Что здесь делать? sizeOfText.setTextColor (this.getResources(). GetColor (R.color.red)); } '@ sarath19 –

0

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

@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); 

    }  
    } 
+0

hoW ДЛЯ ВЫЗОВА LAYOUT В ONOptionItemSelected (элемент MenuItem) @Naveen –

+0

Вы не вызываете alayout, вы просто обновляете макет. Тот, на который вы ссылались в onCreate(). – Skynet

+0

HOw ?? в моей деятельности у меня есть опция меню «DisplayOption» Когда я CLick, что я хочу увеличить размер текстового поля и кнопку @Skynet –

1

Попробуйте

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (id==R.id.display_option) 
    { 
     setContentView(R.layout.YOUR_LAYOUT) 
    } 


    return super.onOptionsItemSelected(item); 
} 
+0

App was Stop and display android.view.InflateException: Binary Строка XML-файла # 16: Ошибка раздувания класса в дегагере –

1
@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; 
} 
+0

Моя группа просмотра ** Относительная компоновка ** !! поэтому в ** myCustomLayout() ** могу ли я изменить LinearLayout на ** RelativeLayout **[email protected] sarath19 –

+0

да, вы можете @SabarishKarthick – sarath19

+0

заменить getActivity() с ключевым словом «this» – sarath19

2

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

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

Вы могли бы использовать:

  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> 

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

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> 

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

+0

Спасибо за подробное объяснение @Yvette –

+0

@SabarishKarthick приветствую вас. Я думаю, что формулировка вашего названия была немного запутанной. Просматривая историю изменений, вы были правы, чтобы ссылаться на активность, а не на макет. Я надеюсь, что с этими ответами он поможет вам и вашему другу с вашим программированием на Android. :) –

+1

Ya Вы сделали большую помощь для нас Мы гордимся и рады получить друга-члена, такого как u на stackoverflow, благодаря большому количеству наших благословенных @Yvette –

Смежные вопросы