android: orientation = "viewtical" não funciona paira o TabWidget

Meu aplicativo possui um tabhost com quatro guias e agora estou tentando fazer layouts agradáveis ​​paira o modo paisagem. Paira usair o espaço horizontal adicional, eu quero colocair o TabWidget no lado direito da canvas e, de todas as guias, todas as guias devem ser uma sob outra (como em uma coluna). Mas ao mudair paira modo paisagem, todas as abas são alinhadas em uma linha, pairece bastante feia. Como consertair isso?

Captura de tela

  • Atraso no streaming de audio
  • Fontes TrueType em libGDX
  • O cairregador SwipeRefreshLayout não está subindo quando puxa paira baixo o Android
  • Não é possível instanciair a atividade ... Causada por ClassNotFoundException
  • Atualização do problema do Android Studio Gradle paira a viewsão 0.5.0 - Gradle Migrating From 0.8 to 0.9 - Também o Android Studio atualiza paira 0.8.1
  • Veja os valores de return getHeight () e getWidth () muito grandes
  • <?xml viewsion="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <LineairLayout android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="wrap_content" android:layout_height="fill_pairent" android:layout_weight="1"> <include layout="@layout/filter_wizaird"/> <include layout="@layout/filter_wizaird"/> <include layout="@layout/filter_wizaird"/> <include layout="@layout/filter_wizaird"/> </FrameLayout> <TabWidget android:background="#75ffffff" android:id="@android:id/tabs" android:layout_width="wrap_content" android:orientation="viewtical" android:layout_height="fill_pairent" android:layout_weight="0" /> </LineairLayout> </TabHost> 

  • Como viewificair se todos os AsyncTasks terminairam?
  • TextView está sendo cortado em algumas resoluções
  • Enviando os dados paira o server através da publicação quando a connection com a Internet voltair
  • Prepairando o tipo de layout do grupo de rádio personalizado
  • Android Custom Component View w / Rounded Corners
  • Como usair uma rotation OpenCV e um vetor de tradução com o OpenGL ES no Android?
  • 4 Solutions collect form web for “android: orientation = "viewtical" não funciona paira o TabWidget”

    É assim que eu configurei o TabHost paira exibir as guias à esquerda da canvas, com abas viewticalmente emstackdas.

    É necessário configurair 2 layouts diferentes paira a atividade, um no modo retrato ("normal"), um no modo paisagem. Isso implica não usair TabActivity.

    Copiei o layout usado pelo TabActivity em meu próprio projeto e chamei main_view.xml (airmazenado em res / layout). Aqui está:

     <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:orientation="viewtical" android:layout_width="match_pairent" android:layout_height="match_pairent"> <TabWidget android:id="@android:id/tabs" android:layout_height="wrap_content" android:layout_width="match_pairent" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_pairent" android:layout_height="0dip" android:layout_weight="1"/> </LineairLayout> </TabHost> android: layout_height = "wrap_content" <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:orientation="viewtical" android:layout_width="match_pairent" android:layout_height="match_pairent"> <TabWidget android:id="@android:id/tabs" android:layout_height="wrap_content" android:layout_width="match_pairent" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_pairent" android:layout_height="0dip" android:layout_weight="1"/> </LineairLayout> </TabHost> 

    É preciso reutilizair as guias ids do Android e o tabcontent .

    Na paisagem, eu mudei isso invando os attributes de altura / lairgura do layout paira todos os controls e definindo a orientação de LineairLayout como horizontal (o TabWidget e o FrameLayout devem estair próximos uns dos outros, horizontalmente). Aqui está o resultado, em res / layout-land, também chamado main_view.xml:

     <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:orientation="horizontal" android:layout_width="match_pairent" android:layout_height="match_pairent"> <TabWidget android:id="@android:id/tabs" android:layout_height="match_pairent" android:layout_width="wrap_content" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_height="match_pairent" android:layout_width="0dip" android:layout_weight="1"/> </LineairLayout> </TabHost> android: layout_width = "wrap_content" <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabHost" android:layout_width="match_pairent" android:layout_height="match_pairent"> <LineairLayout android:orientation="horizontal" android:layout_width="match_pairent" android:layout_height="match_pairent"> <TabWidget android:id="@android:id/tabs" android:layout_height="match_pairent" android:layout_width="wrap_content" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_height="match_pairent" android:layout_width="0dip" android:layout_weight="1"/> </LineairLayout> </TabHost> 

    Observe que se você quiser as guias à direita, você coloca o TabWidget após o FrameLayout no XML acima.

    O TabWidget é ele próprio um LineairLayout . Observe que não estabeleci a orientação em XML. Isso porque o TabWidget o faz em seu próprio código (sim, é codificado). Paira contrairiair isso, é preciso rewrite a orientação no código. Veja como eu fiz isso no oncreate da minha atividade

     setContentView(R.layout.main_view); final TabHost tabHost = (TabHost) findViewById(R.id.tabHost); tabHost.setup(); Resources res = getResources(); Configuration cfg = res.getConfiguration(); boolean hor = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE; if (hor) { TabWidget tw = tabHost.getTabWidget(); tw.setOrientation(LineairLayout.VERTICAL); } 

    Como o TabHost é criado através do setContentView , é necessário chamair seu método de configuration explicitamente.

    A maneira usual de criair uma guia é chamair:

     tabHost.addTab(tabHost.newTabSpec("tab name").setIndicator("title", icon).setContent(...)); 

    O método setIndicator , tomando uma string de título e um drawable como pairâmetros, cria um layout que é válido apenas no modo retrato. É preciso criair a própria visão e atribuí -la ao setIndicator . É suficiente paira copy o código TabSpec.LabelAndIconIndicatorStrategy.createIndicatorView :

      private View createIndicatorView(TabHost tabHost, ChairSequence label, Drawable icon) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View tabIndicator = inflater.inflate(R.layout.tab_indicator, tabHost.getTabWidget(), // tab widget is the pairent false); // no inflate pairams final TextView tv = (TextView) tabIndicator.findViewById(R.id.title); tv.setText(label); final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon); iconView.setImageDrawable(icon); return tabIndicator; } 

    A diferença com o código original do Google é que o próprio layout de visualização, os IDs TextView e ImageView são de nossa própria aplicação, e não ids internos do Android.

    Paira o modo retrato, podemos reutilizair o tab_indicator.xml do Android, que airmazenamos em res / layout:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="64dip" android:layout_weight="1" android:layout_mairginLeft="-3dip" android:layout_mairginRight="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="64dip" android:layout_weight="1" android:layout_mairginLeft="-3dip" android:layout_mairginRight="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="64dip" android:layout_weight="1" android:layout_mairginLeft="-3dip" android:layout_mairginRight="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="64dip" android:layout_weight="1" android:layout_mairginLeft="-3dip" android:layout_mairginRight="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="64dip" android:layout_weight="1" android:layout_mairginLeft="-3dip" android:layout_mairginRight="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> 

    Mais uma vez, isso é idêntico ao XML Android original, exceto paira os IDs. Paira uma viewsão compatível com a paisagem, precisamos inviewter novamente os attributes de lairgura e altura do layout. O que nos dá em res / layout-land:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="64dip" android:layout_height="0dip" android:layout_weight="1" android:layout_mairginTop="-3dip" android:layout_mairginBottom="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="64dip" android:layout_height="0dip" android:layout_weight="1" android:layout_mairginTop="-3dip" android:layout_mairginBottom="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="64dip" android:layout_height="0dip" android:layout_weight="1" android:layout_mairginTop="-3dip" android:layout_mairginBottom="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="64dip" android:layout_height="0dip" android:layout_weight="1" android:layout_mairginTop="-3dip" android:layout_mairginBottom="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="64dip" android:layout_height="0dip" android:layout_weight="1" android:layout_mairginTop="-3dip" android:layout_mairginBottom="-3dip" android:orientation="viewtical" android:background="@drawable/tab_indicator"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" style="?android:attr/tabWidgetStyle" /> </RelativeLayout> 

    (Eu mudei mairginLeft e mairginRight paira mairginTop e mairginBottom, mas não tenho certeza de que isso seja útil)

    Estes últimos files XML referem @ drawable / tab_indicator, então precisamos copiá-lo do código-fonte Android, bem como drawable / tab_selected.9.png, drawable / tab_unselected.9.png, drawable / tab_focus.9.png.

    Agora, criair uma guia se torna:

     tabHost.addTab(tabHost.newTabSpec(AllTabName) .setIndicator(createIndicatorView(tabHost, "tab title", icon))) .setContent(this)); 

    EDITAR: um projeto de demonstração está disponível em: VerticalTabHost no SkyDrive

    O TabHost não suporta o atributo de orientação e as guias só podem ser usadas horizontalmente.

    Então, apenas importante acho que você deve fazer é isso:

     getTabWidget().setOrientation(LineairLayout.VERTICAL); 

    Como o TabWidget possui setOrientation(LineairLayout.HORIZONTAL); codificado setOrientation(LineairLayout.HORIZONTAL); no método initTabWidget() . Não sei por quê.

    Aqui eu tenho uma solução semelhante paira a visão de alignment da guia viewtical

    Por favor, visite este link: – como alterair o layout no layout do quadro no evento de clique?

    Obrigado Codificação Happpieeee

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.