2015-10-09 3 views
18

В настоящее время я создаю пользовательский интерфейс для своего приложения. Я использую Sliding Up Panel и Sliding Tabs(tutorial with implementation explanation) функции. Оба работают нормально. Мне даже удалось реализовать их в одном проекте, но в этом проблема возникает - вкладки «Главная» и «Событие» не реагируют, когда я прикасаюсь к ним (следует открыть страницу, которую она представляет), но они меняются, когда я перемещаюсь между вкладками.Вкладки меню не отвечают

enter image description here

Вот мой код макета. Вот где проблема. Я в этом уверен.

<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=".MainActivity"> 

<include 
    android:id="@+id/tool_bar" 
    layout="@layout/tool_bar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    /> 

<com.sothree.slidinguppanel.SlidingUpPanelLayout 
    xmlns:sothree="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/sliding_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="bottom" 
    sothree:umanoPanelHeight="68dp" 
    sothree:umanoShadowHeight="4dp" 
    sothree:umanoParalaxOffset="100dp" 
    sothree:umanoDragView="@+id/dragView"> 

     <!-- MAIN CONTENT --> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="#ff0000"> 
     <com.ui.test.SlidingTabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    android:background="@color/ColorPrimary"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:layout_weight="1"> 
</android.support.v4.view.ViewPager> 
    </RelativeLayout> 

     <!-- SLIDING LAYOUT --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#55eeeeee" 
     android:orientation="vertical" 
     android:clickable="true" 
     android:focusable="false" 
     android:id="@+id/dragView"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="68dp" 
      android:orientation="horizontal"> 

      <TextView 
       android:id="@+id/name" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:textSize="14sp" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp"/> 

      <Button 
       android:id="@+id/follow" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:textSize="14sp" 
       android:gravity="center_vertical|right" 
       android:paddingRight="10dp" 
       android:paddingLeft="10dp"/> 

     </LinearLayout> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:scaleType="fitStart" 
      android:src="@drawable/daimage" > 
     </ImageView> 
    </LinearLayout> 
</com.sothree.slidinguppanel.SlidingUpPanelLayout> 

Если удалить часть, которая добавляет скользя функции панели, нажав функция позволяет.

<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=".MainActivity"> 

<include 
    android:id="@+id/tool_bar" 
    layout="@layout/tool_bar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    /> 


     <com.ui.test.SlidingTabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    android:background="@color/ColorPrimary"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:layout_weight="1"> 
</android.support.v4.view.ViewPager> 

MainActivity.java

public class MainActivity extends ActionBarActivity implements OnTouchListener{ 

    // Declaring Your View and Variables 

    Toolbar toolbar; 
    ViewPager pager; 
    ViewPagerAdapter adapter; 
    SlidingTabLayout tabs; 
    CharSequence Titles[]={"Side","Front", "Result"}; 
    int Numboftabs =3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 


     // Creating The Toolbar and setting it as the Toolbar for the activity 

     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     setSupportActionBar(toolbar); 


     // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
     adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs); 

     // Assigning ViewPager View and setting the adapter 
     pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(adapter); 

     // Assiging the Sliding Tab Layout View 
     tabs = (SlidingTabLayout) findViewById(R.id.tabs); 
     tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width 



     // Setting Custom Color for the Scroll bar indicator of the Tab View 
     tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
      @Override 
      public int getIndicatorColor(int position) { 
       return getResources().getColor(R.color.tabsScrollColor); 
      } 
     }); 



     // Setting the ViewPager For the SlidingTabsLayout 
     tabs.setViewPager(pager); 

     tabs.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       v.getParent().requestDisallowInterceptTouchEvent(false); 
       return false; 
      } 
     }); 




    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

     @Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
} 


} 
+0

Hi Oleksandr, попытался переключиться на [TabLayout] (https://developer.android .com/intl/zh-cn/reference/android/support/design/widget/TabLayout.html) из Библиотеки поддержки дизайна? .. может быть более отзывчивым. – muruthi

+0

Что вы имеете в виду? –

+0

показать код Java. все, что я могу сказать, это то, что оно перевернуло его, есть ли что-нибудь в вашей библиотеке, как onTabselected или такого рода? там идет работа вокруг этой области – Elltz

ответ

6

Построения на ответ Ого здесь, предполагая, что slidingUpPanel блокирует onTouch для кнопок на вкладке, то вы можете использовать EventListener onTouch запретить родительское расположение, чтобы перехватывать любые события прикосновения, как этого

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


    // Creating The Toolbar and setting it as the Toolbar for the activity 

    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    setSupportActionBar(toolbar); 


    // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
    adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs); 

    // Assigning ViewPager View and setting the adapter 
    pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    // Assiging the Sliding Tab Layout View 
    tabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width 



    // Setting Custom Color for the Scroll bar indicator of the Tab View 
    tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tabsScrollColor); 
     } 
    }); 



    // Setting the ViewPager For the SlidingTabsLayout 
    tabs.setViewPager(pager); 

    // THIS PART, ADD CODE HERE ! 
    tabs.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     v.getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
     } 
    }); 

} 

EDIT 1:

скользящая панель подобна наложению сверху на своих детей, поэтому, если вы сохраняете макет вкладки в детях, полоса обзора скользящей панели будет располагаться прямо поверх полосы вкладок, и это скользящая полоса панели остановит полосу тарелки от recievin g при каждом нажатии или прикосновении к событиям, поэтому , когда вы на самом деле пытаетесь прикоснуться или щелкнуть вкладки, на которые вы на самом деле не нажимаете/не нажимаете на вкладки, потому что вверх по ней находится скользящая панель. то, что вам нужно сделать, это положить slidingtablayout вне slidinguppanel макете

<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=".MainActivity"> 

    <include 
     android:id="@+id/tool_bar" 
     layout="@layout/tool_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 
    <!--this is outside sliding up panel layout--> 
    <com.example.www.slidinguppanelapp.SlidingTabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:background="#f0f0f0"/> 
    <com.sothree.slidinguppanel.SlidingUpPanelLayout 
     android:id="@+id/sliding_layout" 
     xmlns:sothree="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     sothree:umanoDragView="@+id/dragView" 
     sothree:umanoPanelHeight="68dp" 
     sothree:umanoShadowHeight="4dp"> 

     <!-- MAIN CONTENT --> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#ff0000" 
      android:orientation="vertical"> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/pager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1"> 
      </android.support.v4.view.ViewPager> 
     </RelativeLayout> 

     <!-- SLIDING LAYOUT --> 
     <LinearLayout 
      android:id="@+id/dragView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#55eeeeee" 
      android:clickable="true" 
      android:focusable="false" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="68dp" 
       android:orientation="horizontal"> 

       <TextView 
        android:id="@+id/name" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="1" 
        android:gravity="center_vertical" 
        android:paddingLeft="10dp" 
        android:textSize="14sp"/> 

       <Button 
        android:id="@+id/follow" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" 
        android:gravity="center_vertical|right" 
        android:paddingLeft="10dp" 
        android:paddingRight="10dp" 
        android:textSize="14sp"/> 

      </LinearLayout> 

      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1" 
       android:scaleType="fitStart" 
       android:src="@drawable/blur_bg"> 
      </ImageView> 
     </LinearLayout> 
    </com.sothree.slidinguppanel.SlidingUpPanelLayout> 
</LinearLayout> 
+0

Спасибо за ответ. Я добавил это к моему MainActivity.java, но я получаю эти ошибки на первую строку: 'Несколько маркера на этой линии \t - Синтаксическая ошибка на лексемы«setOnTouchListener», недействительны \t AnnotationName \t - Синтаксическая ошибка, вставить" } "для завершения Блока \t - Ошибка синтаксиса на токенах, неудачных конструкциях (s)' и этой 'Синтаксическая ошибка в токене"} ", недопустимое значение ConstructorHeaderName' для последнего. Что мне делать? –

+0

Итак, как я могу это исправить? –

+0

Ну, они выглядят как синтаксические ошибки, вы можете опубликовать весь код класса, я должен был бы взглянуть на полный код класса, чтобы увидеть структуру цветочного кронштейна – Bhargav

3

Из документации:

По умолчанию, вся группа будет выступать в качестве области сопротивления и будет перехватывать щелчки и перетаскивать события , Вы можете ограничить область перетаскивания определенным видом с помощью метода setDragView или umanoDragView.

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

+0

Добавление 'umanoDragView' в' com.ui.test.SlidingTabLayout' ничего не меняет. –

+0

добавьте его в свой viewpager – yennsarah

+0

перемещен 'sothree: umanoDragView =" @ + id/dragView1 "' to 'ViewPager' - ничего не изменилось –

0
tabs.setOnTouchListener(new View.OnTouchListener { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     v.getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
    } 
}); 

положить это внутри OnCreate()

+0

Есть много ошибок. Проверьте обновленный вопрос для кода и скриншота –

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