2016-04-20 3 views
1

Я создаю приложение для Android и на моем MainActivity У меня есть кнопка «switch» и прямо под ней. У меня есть панель с тремя разными вкладками.Функции, перекрывающиеся друг с другом в Android

Кнопка переключателя может быть установлена ​​в положение «включено» и «выключено». Это было первое, что я пытался сделать, и все получилось просто отлично. Но после того, как я добавил эту панель с вкладками, кнопка переключения перестала работать, у нее, похоже, есть что-то внутри этой панели, что не позволяет коммутатору работать. Я новичок в разработке Android.

Это мой MainActivity Код:

Если стереть или комментарий все от «// Tabs» ниже переключатель снова начинает работать, иначе он просто не изменяется от включенного состояния в выключенное.

public class MainScreen extends AppCompatActivity{ 

    Switch list_toggle; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_screen); 

     final TextView textView4 = (TextView) findViewById(R.id.textView4); 

     textView4.setText(Html.fromHtml("Absent")); 

     list_toggle = (Switch) findViewById(R.id.mySwitch); 
     list_toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 

        textView4.setText(Html.fromHtml("Available")); 

       } else { 

        textView4.setText(Html.fromHtml("Absent")); 

       } 
      } 
     }); 

     //Tabs 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.addTab(tabLayout.newTab().setText("Orders")); 
     tabLayout.addTab(tabLayout.newTab().setText("Past Orders")); 
     tabLayout.addTab(tabLayout.newTab().setText("More")); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

     final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     final PagerAdapter adapter = new PagerAdapter 
       (getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     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) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Вот мой XML-код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/topbg" 
     android:minHeight="?attr/actionBarSize"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      > 

      <ImageView 
       android:id="@+id/imageView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:src="@drawable/top_logo" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:text="Hi, Marcos" 
       android:id="@+id/textView3" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" 
       android:textSize="12dp" /> 

     </RelativeLayout> 
    </android.support.v7.widget.Toolbar> 

    <Switch 
     android:id="@+id/mySwitch" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:showText="true" 
     android:textOn="ON" 
     android:thumb="@drawable/customswitchselector" 
     android:track="@drawable/custom_track" 
     android:textOff="OFF" 
     android:layout_marginTop="28dp" 
     android:textColor="#ffffff" 
     android:layout_marginLeft="50dp" 
     android:layout_marginStart="50dp" 
     android:layout_below="@+id/toolbar" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:id="@+id/textView4" 
     android:layout_marginRight="69dp" 
     android:layout_marginEnd="69dp" 
     android:textColor="#a6a6a6" 
     android:textSize="30dp" 
     android:layout_alignBottom="@+id/mySwitch" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v4.view.ViewPager> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      android:elevation="6dp" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginTop="149dp" /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager1" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:layout_below="@id/tab_layout"/> 

    </RelativeLayout> 

</RelativeLayout> 
+0

Показать свой XML, я думаю, что ваша проблема есть. – lfal

+0

Я просто добавил xml к сообщению. –

+0

Похоже, что атрибуты для позиционирования в RelativeLayout отсутствуют. Если это проблема, связанная с отключением коммутатора и вставкой его в конец RelativeLayout (что делает его последним ребенком), он должен работать. Вы можете попробовать? – Nedko

ответ

0

Использование RelativeLayout означает, что вы позиционируете его ребенок рассматривает сравнительно друг к другу. Например, вы можете сказать, что хотите, чтобы TabLayout появился ниже Switch. Чтобы указать связь между двумя видами, используются эти два атрибута: android:layout_below и android:layout_toRightOf. С их помощью вы говорите, что я хочу, чтобы это представление было ниже или справа от представления со следующим идентификатором ресурса. В вашем случае это как макет TabLayout должен выглядеть:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/mySwitch"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="149dp" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager1" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/tab_layout"/> 

</RelativeLayout> 

Обратите внимание, что вы уже делаете то же самое отношение между Switch и Toolbar.

Существуют и другие теги, работающие с RelativeLayout (центрирование представления или привязка к краю макета). Если вы не предоставите ни одного из них для дочернего представления, он по умолчанию будет рисоваться в верхнем левом краю RelativeLayout. Если там уже есть вид, они просто будут друг на друга. Если вы не предоставите информацию о местоположении для любого из ваших дочерних представлений, все они будут вырезаны в верхнем левом краю и могут перекрываться. Иногда это поведение, которое мы ищем, но не в вашем случае. Вы не добавили атрибут для макета раздела Tab в xml и Android, чтобы просто нарисовать его поверх коммутатора. Таким образом, этот макет получил события касания, предназначенные для Switch, и это не помогло.

Но зачем делать Switch последний ребенок работал? Поскольку представления отображаются в том порядке, в котором они находятся в xml. Поэтому, когда Switch является последним, он нарисован последним, после дочернего элемента RelativeLayout, и он должен быть сверху. Это означает, что теперь он может получить события касания. Однако вы можете видеть, как использование атрибутов является лучшим решением. Они фактически предназначены для решения таких ситуаций, как ваши, и использование порядка детей является довольно тонким.