Приложение панели вкладок в Android 4.0

Я собираюсь разработать приложение для Android в Android 4.0, как показано на рисунке ниже.

ActionBar с вкладкой

Мне нужно динамически создавать эти вкладки, которые динамически вызывают метод addTab() и динамически создают панель вкладок. Подходит ли ActionBarWithTab для моих требований? Укажите правильный путь. Пожалуйста, предоставьте учебники.

РЕДАКТИРОВАТЬ 1: мне нужно загрузить веб-просмотр на отдельной панели вкладок, созданной в панели действий.

EIDT 2: для создания панели вкладок с помощью TabHost сначала я создал ViewGroup для TabHost и добавил элементы панели вкладок, как показано ниже. В элементах панели вкладок я создал макет, внутри макета веб-просмотр и загрузил динамический URL-адрес в элемент панели вкладок. Наконец, я установил группу просмотра как contentview();

    sTabHost = new TabHost(context,null);
    sTabHost.setLayoutParams(
            new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));


    TabWidget tabWidget = new TabWidget(context);
    tabWidget.setId(android.R.id.tabs);
    sTabHost.addView(tabWidget, new LinearLayout.LayoutParams(
              LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 


    FrameLayout frameLayout = new FrameLayout(context);
    frameLayout.setId(android.R.id.tabcontent);
    final float scale = context.getResources().getDisplayMetrics().density;
    int paddingtop = (int) (64 * scale + 0.5f);
    frameLayout.setPadding(0, paddingtop, 0, 0);
    sTabHost.addView(frameLayout, new LinearLayout.LayoutParams(
              LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));         

    sTabHost.setup();        

Затем я добавил элементы вкладки, как показано ниже.

 public void addTabItem(final String url, String tabTitle, Drawable tabIcon)
{    
    TabSpec ts1 = sTabHost.newTabSpec(tabTitle); 
    if(tabTitle.equals(""))
    {
        int childcount=sTabHost.getChildCount();
        tabTitle="Tab" + String.valueOf(childcount+1);          
    }
    if(tabIcon==null)
        ts1.setIndicator(tabTitle);
    else
        ts1.setIndicator(tabTitle,tabIcon);        
    ts1.setContent(new TabHost.TabContentFactory(){
         public View createTabContent(String tag)
         {               
                LinearLayout panel = new LinearLayout(sActiveContext);
                panel.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
                        LayoutParams.WRAP_CONTENT));
                panel.setOrientation(LinearLayout.VERTICAL);
                FrameLayout layout=new FrameLayout();
                    // Here I am creating the webview loaded with the url within the layout and placed into the above FrameLayout.                  
                panel.addView(layout);
                return panel;
         }  
    }); 
    sTabHost.addTab(ts1);
    sTabHost.setOnTabChangedListener(this);
  }

Теперь, как я могу добиться этого на панели действий, как изображение, которое я добавил?

Я создал панель действий с вкладками, как показано ниже.

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

    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tabA = actionBar.newTab();
    tabA.setText("Tab A");
    tabA.setTabListener(new TabListener<MyFragmentA>(this, "Tag A", MyFragmentA.class));
    actionBar.addTab(tabA);
}

Класс TabListener показан ниже.

public static class TabListener<T extends Fragment> 
    implements ActionBar.TabListener{

    private final Activity myActivity;
    private final String myTag;
    private final Class<T> myClass;

    public TabListener(Activity activity, String tag, Class<T> cls) {
        myActivity = activity;
        myTag = tag;
        myClass = cls;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

        // Check if the fragment is already initialized
        if (myFragment == null) {
            // If not, instantiate and add it to the activity
            myFragment = Fragment.instantiate(myActivity, myClass.getName());
            ft.add(android.R.id.content, myFragment, myTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.show(myFragment);
        }

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

        if (myFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.hide(myFragment);
        }

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }

}

Класс Fragment показан ниже.

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View myFragmentView = inflater.inflate(R.layout.fragment_c, container, false);

    WebView webview = (WebView) myFragmentView.findViewById(R.id.webview);
    webview.setWebViewClient(new MyWebViewClient());
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setPluginsEnabled(true);
    webview.getSettings().setBuiltInZoomControls(false); 
    webview.getSettings().setSupportZoom(false);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);   
    webview.getSettings().setAllowFileAccess(true); 
    webview.getSettings().setDomStorageEnabled(true); 
    webview.loadUrl("http://jquerymobile.com/demos/1.2.1/");

    return myFragmentView;
}

public class MyWebViewClient extends WebViewClient {        
    /* (non-Java doc)
     * @see android.webkit.WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
     */


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.endsWith(".mp4")) 
        {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.parse(url), "video/*");

            view.getContext().startActivity(intent);
            return true;
        } 
        else {
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
}

В приведенной выше реализации я создал макет и отдельный класс фрагментов. Вместо того, чтобы создавать подобное, как я могу добиться этого, не создавая макет xml и отдельный класс фрагментов. Это похоже на код, который я разместил для панели вкладок TabHost.

РЕДАКТИРОВАТЬ 3: я создал панель действий и элементы вкладок, подобные приведенному ниже коду.

 public void addTabBar(Context context)
{       
    sActiveContext=context;
    sActionBar = getActionBar();
    sActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}

public void addTabItem(final String url, String tabTitle)
{   
    Tab tab = sActionBar.newTab();
    if(tabTitle.equals(""))
    {
        int childcount=sActionBar.getTabCount();
        tabTitle="Tab" + String.valueOf(childcount+1);          
    }
    tab.setText(tabTitle);
     //Here I need to create the Layout with the webview and loaded into the created tab.
    tab.setTabListener(this);
    sActionBar.addTab(tab);
}

Как я могу загрузить веб-просмотр с заданным URL-адресом на определенную вкладку?


person Karthick    schedule 12.04.2013    source источник
comment
coderzheaven .com/2012/10/08/   -  person Ajay    schedule 12.04.2013


Ответы (3)


Ответ для редактирования 3: - Попробуйте это,

@SuppressLint("ValidFragment")
public class Sample extends FragmentActivity implements TabListener{
    private ActionBar mActionBar=null;
    private ArrayList<String> arrayList=null;
    private LinearLayout linearLayout=null;
    private WebView webView=null;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        linearLayout=new LinearLayout(this);
        linearLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
        linearLayout.setOrientation(LinearLayout.VERTICAL); 
        setContentView(linearLayout);
        mActionBar=getActionBar();
        mActionBar.setDisplayShowHomeEnabled(true);
        mActionBar.setDisplayShowTitleEnabled(false);
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            webView=new WebView(this);
        linearLayout.addView(webView);
        arrayList=new ArrayList<String>();
        addTab(0,"https://docs.google.com/viewer?url=http://121.242.120.82:8090/iSmartDM/DC/KIMS_Hospital_28/KIMS_hospital_Default_29" +
                    "/Physician_2_37/DOC/stamos-5644-00@gs138a-[01062006]-[160859]-[ds4000]-[].rtf");
        addTab(1,"https://www.google.co.in");
        addTab(2,"http://stackoverflow.com/questions/15964641/tab-bar-app-in-android-4-0/16009038?noredirect=1#comment22832140_16009038");
    }
    private void addTab(int position,String URL)
    {
mActionBar.addTab(mActionBar.newTab().setTag("tab"+String.valueOf(position)).
                    setText("Tab "+String.valueOf(position)).setTabListener(this));
            arrayList.add(URL);
        }
        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        }
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
    webView.getSettings().setJavaScriptEnabled(true);
                for (int i = 0; i < arrayList.size(); i++) {
                    if(tab.getPosition()==i)
                    {
                        webView.loadUrl(arrayList.get(i));
                        System.out.println(arrayList.get(i));
                        break;
                    }
                }
        }
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            //if(webView!=null)
                //linearLayout.removeView(webView);
        }
    }
person Sino Raj    schedule 15.04.2013
comment
Большое спасибо за ответ Сино. Если я использую приведенный выше код. Я ограничен созданием только трех вкладок. Если я реализую динамически и скрываю источник как исполняемый JAR. Затем я могу вызвать addTab(), передав заголовок и URL-адрес, и могу динамически создавать столько вкладок. Не могли бы вы дать несколько предложений.? - person Karthick; 15.04.2013
comment
Большое спасибо Сино. Если я получаю веб-просмотр внутри linearlayout, например, панель LinearLayout = new LinearLayout(sActiveContext); panel.setLayoutParams(новые LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); панель.setOrientation(LinearLayout.VERTICAL); Веб-просмотр CustomWebView = новый CustomWebView (sActiveContext); Макет FrameLayout=webview.createwebview(); // Я создал веб-просмотр с некоторыми настраиваемыми параметрами. webview.initwebview(url); панель.addView(макет); панель возврата; Тогда как я могу добавить это как содержимое вкладки - person Karthick; 15.04.2013
comment
Нет необходимости в веб-просмотре и настройках. У меня есть настроенный веб-просмотр внутри linearlayout. Если я вызываю метод initwebview(), я получаю веб-просмотр на панели, добавляя макет. панель.addView(макет). Мой вопрос в том, как я могу добавить linearlayout к содержимому конкретной вкладки. - person Karthick; 15.04.2013
comment
Если я создаю приложение с одной страницей, это означает, что я вызвал какой-то другой метод для создания веб-просмотра. Если это приложение с панелью вкладок, то я вызвал некоторый набор методов для создания веб-просмотра. Это обычный веб-просмотр внутри FrameLayout. Я могу вызвать метод, чтобы получить мой собственный веб-просмотр в любом месте. - person Karthick; 15.04.2013
comment
Я вызвал метод createTabContent(), который создает веб-просмотр внутри linearlayout и возвращает View. Как я могу загрузить это представление как содержимое определенной вкладки. Это именно то, что мне было нужно. - person Karthick; 15.04.2013
comment
createTabContent() связан только с хостом вкладки и спецификацией вкладки, поэтому возникает проблема с реализацией на вкладке панели действий. - person Sino Raj; 15.04.2013
comment
Да, это связано с tabhost, я просто указываю имя. Если у меня есть представление с веб-просмотром внутри linearlayout. Как я могу загрузить этот вид в качестве содержимого определенной вкладки? Это то, что мне нужно. - person Karthick; 15.04.2013
comment
Этот ответ является решением вашей проблемы. Когда вкладки на панели действий могут быть сосредоточены только на промежуточных действиях, которые не связаны напрямую с представлением/контентом. Панель действий в основном смотрит на транзакции фрагментов, но также выполняет действия этого типа. Таким образом, вы можете изменить свой код таким образом или использовать фрагменты. - person Sino Raj; 15.04.2013
comment
Хорошо спасибо. Если я использую средства транскации фрагментов, tabA.setTabListener(new TabListener‹MyFragmentA›(this, Tag A, MyFragmentA.class)); это единственный способ?. Или какой-то другой способ использовать фрагменты. Потому что я создаю элемент вкладки динамически. Как я могу создавать фрагменты динамически? - person Karthick; 15.04.2013
comment
В приведенном выше коде при переключении с одной вкладки на другую вкладка каждый раз создается заново. Как предотвратить повторное создание вкладки.? - person Karthick; 15.04.2013
comment
вкладка не воссоздается, но их вид/содержимое воссоздается/добавляется на основе изменения вкладки. Если вкладка не выбрана, это веб-представление удаляется из группы представлений/линейного макета. Теперь я отредактировал это, чтобы удалить повторное добавление веб-представления... - person Sino Raj; 15.04.2013
comment
Да, содержимое вкладки создается заново. Но приведенный выше код не устраняет проблему повторного создания содержимого вкладки. Не могли бы вы дать какое-нибудь предложение.? - person Karthick; 16.04.2013
comment
Я загрузил пользовательский веб-просмотр на соответствующую вкладку, добавив панель в linearlayout в соответствии с вашим кодом. В tabhost getCurrentWebView() — это метод для получения веб-просмотра. Но, к сожалению, на вкладках панели действий такого метода нет. Как я могу загрузить текущий веб-просмотр на текущей выбранной вкладке? - person Karthick; 16.04.2013
comment
Просто используйте ArrayList‹WebView› arrayList=null, который объявлен вне всех функций, затем инициализируйте его и добавьте каждое веб-представление в этот список массивов со своей позицией. Если вы хотите получить это, arrayList.get(getActionBar().getSelectedTab().getPosition()); - person Sino Raj; 16.04.2013
comment
Да, я получил текущий веб-просмотр. Спасибо Сино. Содержимое вкладки всегда воссоздается при выборе вкладки. Как я могу решить эту проблему.? - person Karthick; 16.04.2013
comment
Привет, Сино, содержимое вкладки всегда воссоздается. Не могли бы вы дать несколько предложений.? - person Karthick; 16.04.2013
comment
Вы удаляете «CustomWebView» или очищаете линейный макет после onTabUnSelected()?. Единственный способ справиться с этой проблемой — использовать фрагменты для каждой транзакции вкладок. Фрагменты могут сами сохранять свое представление каждый раз (при правильной обработке транзакции фрагмента). - person Sino Raj; 16.04.2013
comment
Я ничего не убираю. Да, у фрагментов есть свой способ сохранения состояния. Но как я могу динамически создавать фрагмент для каждой вкладки. - person Karthick; 16.04.2013
comment
Есть ли другое применение для Linear Layout? Почему вы используете CustomWebView? и что такое структура для просмотра (которая основана на смене вкладок)? - person Sino Raj; 16.04.2013
comment
Другого применения линейной компоновки нет. Используется настроенный веб-просмотр, потому что вместо использования макетов xml я могу создать экземпляр веб-просмотра и напрямую загрузить URL-адрес. Я могу преобразовать этот настроенный веб-просмотр в банку и использовать во многих приложениях. Я разместил полный код в stackoverflow.com/questions/16028911/menu-in-action-bar-android/ по этой ссылке. В методе onTabUnselected() я делаю что угодно. - person Karthick; 16.04.2013
comment
У меня возникла проблема с получением веб-просмотра. Вот если я выберу вкладку 1 и вкладку 3, добавив веб-просмотр в список массивов без второго индекса (вкладка 2), приложение будет аварийно завершено. - person Karthick; 16.04.2013
comment
Привет, Сино, я не могу динамически создать фрагмент для конкретной вкладки. Не могли бы вы мне помочь.? - person Karthick; 17.04.2013
comment
Hi Sino Как установить вкладки панели действий в нижней части экрана - person Sanjay Mangaroliya; 31.07.2014

Панель действий с фрагментами

Попробуйте это, это отлично работает ..

В файле манифеста

<uses-sdk
        android:minSdkVersion="11"/>
<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
<activity
            android:name="packageName.ActionBarFragmentActivity"
            android:configChanges="orientation"
            android:theme="@android:style/Theme.Holo.Light"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
<!--change  packageName -->

ActionBarFragmentActivity.java

@SuppressLint("NewApi")
public class ActionBarFragmentActivity extends FragmentActivity implements TabListener{
    private ActionBar actionBar=null;
    private Fragment1 fragment1=null;
    private Fragment2 fragment2=null;
    private Fragment3 fragment3=null;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_layout);
        actionBar=getActionBar();
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        actionBar.addTab(actionBar.newTab().setTag("first").setText("First").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setTag("second").setText("Second").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setTag("third").setText("Third").setTabListener(this));

        fragment1=new Fragment1();
        fragment2=new Fragment2();
        fragment3=new Fragment3();

        getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout,fragment1);
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if(tab.getPosition()==0)
        {
            getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout,fragment1).commit();
            fragment1.onUpdateView();
        }
        else if(tab.getPosition()==1)
        {
            getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout,fragment2).commit();
            fragment2.onUpdateView();
        }
        else if(tab.getPosition()==2)
        {
            getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout,fragment3).commit();
            fragment3.onUpdateView();
        }
    }
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }
}

main_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frameLayout"
    android:orientation="vertical" >
</FrameLayout>

webview_layout.xml

<WebView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/webView"
    android:layout_height="match_parent" >
</WebView>

Фрагмент1.java

public class Fragment1 extends android.support.v4.app.Fragment{
    private WebView webView=null;
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
    } 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
          View view = inflater.inflate(R.layout.webview_layout, container, false);
          webView=(WebView)view.findViewById(R.id.webView);
          return view;
    }
    @Override
    public void onStart()
    {
        super.onStart();
    }
    @Override
    public void onPause()
    {
        super.onPause();
    }
    @Override
    public void onResume()
    {
        super.onResume();
    }
    @Override
    public void onStop()
    {
        super.onStop();
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
    }
    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
    }
    @Override
    public void onActivityCreated(Bundle bundle)
    {
        super.onActivityCreated(bundle);
        onUpdateView();
    }
    public void onUpdateView()
    {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://docs.google.com/viewer?url=http://121.242.120.82:8090/iSmartDM/DC/KIMS_Hospital_28/KIMS_hospital_Default_29" +
                "/Physician_2_37/DOC/stamos-5644-00@gs138a-[01062006]-[160859]-[ds4000]-[].rtf");
    }
}

Фрагмет2.java

public class Fragment2 extends android.support.v4.app.Fragment{
    private WebView webView=null;
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
    } 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
          View view = inflater.inflate(R.layout.webview_layout, container, false);
          webView=(WebView)view.findViewById(R.id.webView);
          return view;
    }
    @Override
    public void onStart()
    {
        super.onStart();
    }
    @Override
    public void onPause()
    {
        super.onPause();
    }
    @Override
    public void onResume()
    {
        super.onResume();
    }
    @Override
    public void onStop()
    {
        super.onStop();
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
    }
    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
    }
    @Override
    public void onActivityCreated(Bundle bundle)
    {
        super.onActivityCreated(bundle);
    }
    public void onUpdateView()
    {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("http://www.google.co.in/");
    }
}

Фрагмент3.java

public class Fragment3 extends android.support.v4.app.Fragment{
    private WebView webView=null;
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
    } 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
          View view = inflater.inflate(R.layout.webview_layout, container, false);
          webView=(WebView)view.findViewById(R.id.webView);
          return view;
    }
    @Override
    public void onStart()
    {
        super.onStart();
    }
    @Override
    public void onPause()
    {
        super.onPause();
    }
    @Override
    public void onResume()
    {
        super.onResume();
    }
    @Override
    public void onStop()
    {
        super.onStop();
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
    }
    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
    }
    @Override
    public void onActivityCreated(Bundle bundle)
    {
        super.onActivityCreated(bundle);
    }
    public void onUpdateView()
    {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("http://www.youtube.com/?gl=IN&tab=w1");
    }
}

Отредактировано ------------- "Динамические макеты" ------ Активность: - onCreate();

FrameLayout frameLayout=new FrameLayout(this);
    setContentView(frameLayout);
    frameLayout.setId(1111);

Фрагмент транзакции...

getSupportFragmentManager().beginTransaction().replace(1111,fragment1).commit();

Фрагмент:-

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
        webView=new WebView(getActivity());
        webView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        return webView;
    }
person Sino Raj    schedule 15.04.2013
comment
Большое спасибо Сино. Я также разместил свой код в своем вопросе. Не могли бы вы дать несколько предложений, чтобы создать все эти вещи без использования макетов xml. Как я могу сделать все это программно без макетов xml? - person Karthick; 15.04.2013
comment
Привет, Не могли бы вы дать мне предложения по РЕДАКТИРОВАТЬ 3 в моем вопросе? - person Karthick; 15.04.2013
comment
Как установить вкладки внизу экрана - person Sanjay Mangaroliya; 31.07.2014
comment
@user2630955 user2630955 - пожалуйста, прочитайте это, stackoverflow.com /вопросы/12220428/. Android не позволяет добавлять панель действий внизу, потому что тема Android по умолчанию — это вкладки, выровненные вверху. Если вы хотите этого, вы должны следовать другому пути, например, хосту вкладок, просмотру индикатора пейджера и т. Д. - person Sino Raj; 01.08.2014

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

И вы можете использовать элемент управления Tab Host для вкладок внутри фрагмента (вложенные вкладки). Когда вам нужны дополнительные вкладки на фрагменте, используйте макет для этого фрагмента как,

sub_tab_fragment.xml,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            >

            <TabWidget
                android:id="@android:id/tabs"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                />

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_weight="0"/>

            <FrameLayout
                android:id="@+android:id/realtabcontent"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>
        </LinearLayout>
    </TabHost>
</LinearLayout> 

А затем внутри фрагмента,

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{   
     View view = inflater.inflate(R.layout.sub_tab_fragment, container, false);
     mTabHost=(TabHost)v.findViewById(android.R.id.tabhost);
     return v;
}
@Override
public void onActivityCreated(Bundle bundle)
{
    super.onActivityCreated(bundle);
    mTabHost.setup();

    View tabview = createTabView(mTabHost.getContext(), "First");
        mTabHost.addTab(mTabHost.newTabSpec("First").setIndicator(tabview).setContent(R.id.realtabcontent));

    View tabview1 = createTabView(mTabHost.getContext(), "Second");
        mTabHost.addTab(mTabHost.newTabSpec("Second").setIndicator(tabview1).setContent(R.id.realtabcontent));

    View tabview2 = createTabView(mTabHost.getContext(), "Third");
        mTabHost.addTab(mTabHost.newTabSpec("Third").setIndicator(tabview2).setContent(R.id.realtabcontent));

    View tabview3 = createTabView(mTabHost.getContext(), "Fourth");
        mTabHost.addTab(mTabHost.newTabSpec("Fourth").setIndicator(tabview3).setContent(R.id.realtabcontent));

    View tabview4 = createTabView(mTabHost.getContext(), "Fifth");
        mTabHost.addTab(mTabHost.newTabSpec("Fifth").setIndicator(tabview4).setContent(R.id.realtabcontent));


  mTabHost.setOnTabChangedListener(mTabListener);
}

Затем вы будете реализовывать/обрабатывать содержимое вкладок (тот же метод, что и в панели действий).

Отредактировано-----addTabItem(final String url, String tabTitle, Drawable tabIcon)*****

public void addTabItem(final String url, String tabTitle, Drawable tabIcon)
{    
    WebView webView=null;
    TabSpec ts1 = sTabHost.newTabSpec(tabTitle); 
    if(tabTitle.equals(""))
    {
        int childcount=sTabHost.getChildCount();
        tabTitle="Tab" + String.valueOf(childcount+1);          
    }
    if(tabIcon==null)
        ts1.setIndicator(tabTitle);
    else
        ts1.setIndicator(tabTitle,tabIcon);        
    ts1.setContent(new TabHost.TabContentFactory(){
         public View createTabContent(String tag)
         {               
               webView=new WebView(sActiveContext);
           webView.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, 
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
                return webView;
         }  
    }); 
    sTabHost.addTab(ts1);
    sTabHost.setOnTabChangedListener(this);
    webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://docs.google.com/viewer?url=http://121.242.120.82:8090/iSmartDM/DC/KIMS_Hospital_28/KIMS_hospital_Default_29" +
                "/Physician_2_37/DOC/stamos-5644-00@gs138a-[01062006]-[160859]-[ds4000]-[].rtf");
  }
person Sino Raj    schedule 12.04.2013
comment
Спасибо за ответ. Я уже создал вкладку, используя TabWidget и TabHost, которые устарели. Тем временем мы можем использовать эти функции. Но мне нужен внешний вид Android 4.0. Как я могу этого добиться.? В то же время мне нужно загрузить отдельный веб-просмотр в созданные вкладки. Мне нужно добиться того же, что и в developer.android.com/guide/topics /ui/actionbar.html#Вкладки - person Karthick; 12.04.2013
comment
Привет, см. мой РЕДАКТИРОВАТЬ 2. Я добавил код для создания панели вкладок с помощью tabhost. Как я могу добиться этого в панели действий.? - person Karthick; 13.04.2013
comment
Привет, спасибо за ответ. Я уже создал подобное и загрузил веб-просмотр, который выглядит как панель вкладок в версии 2.2. Мне нужно изменить этот внешний вид в версии Android 4.0. Не могли бы вы мне помочь? - person Karthick; 15.04.2013
comment
Вы ищете настройку панели действий или загрузку содержимого в веб-представлении? - person Sino Raj; 15.04.2013
comment
создание вкладки на панели действий и загрузка веб-просмотров в созданных вкладках. - person Karthick; 15.04.2013
comment
Фрагмент - хорошая концепция для разделения активности на несколько форм, и у нее много новых идей. Это хорошая идея для создания панели действий в действии. - person Sino Raj; 15.04.2013
comment
Вы посещаете 3 URL-адреса в первом абзаце этого ответа. Там содержится вся концепция и идея о вашей проблеме. - person Sino Raj; 15.04.2013
comment
Сначала попробуйте с этим, если у вас возникнут какие-либо проблемы, вы можете обратиться ко мне. - person Sino Raj; 15.04.2013
comment
Только сейчас попробовал образец. Создано 5 вкладок в ActionBar. Я создал макет с помощью веб-просмотра. Но в webview css не загружается. - person Karthick; 15.04.2013
comment
Я создал образец с пятью панелями вкладок в ActionBar и загрузил разные URL-адреса. Теперь, как я могу добиться этого динамически. Это похоже на настройку содержимого панели вкладок, созданной с помощью TabHost и TabWidget. ts1.setContent(new TabHost.TabContentFactory(){ public View createTabContent(String tag) { //Создание панели и загрузка веб-просмотра. Как в моем посте } }); - person Karthick; 15.04.2013