Android组件通信——ActivityGroup(二十五)

这篇具有很好参考价值的文章主要介绍了Android组件通信——ActivityGroup(二十五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. ActivityGroup

1.1 知识点

(1)了解ActivityGroup的作用;

(2)使用ActivityGroup进行复杂标签菜单的实现;

(3)使用PopupWindow组件实现弹出菜单组件开发;

1.2 具体内容

Android组件通信——ActivityGroup(二十五),Android,开发语言,android

Android组件通信——ActivityGroup(二十五),Android,开发语言,android

Android组件通信——ActivityGroup(二十五),Android,开发语言,android

Android组件通信——ActivityGroup(二十五),Android,开发语言,android

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

    <LinearLayout 
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
        >
        <TextView android:id="@+id/cust_title"
                  android:textSize="28sp"
                  android:text="ActivityGroup实现分页导航"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
        /> 
    </LinearLayout>
    <!-- 中间动态加载的View -->
    <ScrollView 
        android:measureAllChildren="true"
        android:id="@+id/containerBody" 
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        ></ScrollView>
    <LinearLayout 
        android:background="@android:color/black"
        android:layout_gravity="bottom"
        android:orientation="horizontal"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        >
        <!-- 导航按钮1 -->
        <ImageView 
            android:id="@+id/img1"
            android:src="@android:drawable/ic_dialog_dialer"
            android:layout_marginLeft="7dp" 
            android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            />
         <!-- 导航按钮2 -->
        <ImageView 
            android:id="@+id/img2"
            android:src="@android:drawable/ic_dialog_info"
            android:layout_marginLeft="7dp" 
            android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            />
         <!-- 导航按钮3 -->
        <ImageView 
            android:id="@+id/img3"
            android:src="@android:drawable/ic_dialog_alert"
            android:layout_marginLeft="7dp" 
            android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            />
    </LinearLayout>
    
</LinearLayout>

package com.example.activitygroupproject;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ScrollView;

public class ActivityGroupActivity extends ActivityGroup {
    ScrollView container =null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏
		setContentView(R.layout.activity_activity_group);
		container = (ScrollView) super.findViewById(R.id.containerBody);
		//导航1
		ImageView img1= (ImageView) super.findViewById(R.id.img1);
		img1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				container.removeAllViews();//清空子View
				container.addView(getLocalActivityManager().startActivity("Module1", 
						new Intent(ActivityGroupActivity.this,ModuleView1.class)
				.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView());
			}
		});
		//导航2
				ImageView img2= (ImageView) super.findViewById(R.id.img2);
				img2.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View v) {
						container.removeAllViews();//清空子View
						container.addView(getLocalActivityManager().startActivity("Module2", 
								new Intent(ActivityGroupActivity.this,ModuleView2.class)
						.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView());
					}
				});
				//导航3
				ImageView img3= (ImageView) super.findViewById(R.id.img3);
				img3.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View v) {
						container.removeAllViews();//清空子View
						container.addView(getLocalActivityManager().startActivity("Module3", 
								new Intent(ActivityGroupActivity.this,ModuleView3.class)
						.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView());
					}
				});
	}


}

下面是子Activity的布局和文件:

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ModuleView1" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一个Module" />

</RelativeLayout>

package com.example.activitygroupproject;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class ModuleView1 extends Activity {

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


}

共有三个子Activity,其余两个类似,就只写一个。

以下实现目前非常流行的标签页实现形式FragmentTabHost+ViewPager。

主布局:

<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=".FragmentTabHostActivity" >
   
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    
    <FrameLayout
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <FrameLayout 
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0"
            >
            
        </FrameLayout>
        
        
        
    </android.support.v4.app.FragmentTabHost>
        
</LinearLayout>

Activity:

package com.example.fragmenttabhost;

import java.util.ArrayList;
import java.util.List;

import android.R.color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;
import android.widget.TabWidget;
import android.widget.TextView;

public class FragmentTabHostActivity extends FragmentActivity {
	FragmentTabHost mTabHost = null;
    LayoutInflater layoutInflater = null;
    Class fragmentArray[] = {FragmentPage1.class,FragmentPage2.class,FragmentPage3.class};
    int mImageViewArray[] = {android.R.drawable.ic_dialog_dialer,android.R.drawable.ic_dialog_info,android.R.drawable.ic_dialog_alert};
    String mTextViewArray[] = {"首页","消息","好友"};
    ViewPager vp;
    List<Fragment> list = new ArrayList<Fragment>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_fragment_tab_host);
		//实例化组件
		initView();
		initPager();
	}

    public void initView(){
    	vp = (ViewPager) super.findViewById(R.id.pager);
    	vp.setOnPageChangeListener(new ViewPagerListener());
    	layoutInflater = LayoutInflater.from(this);//实例化布局对象
    	mTabHost = (FragmentTabHost) super.findViewById(android.R.id.tabhost);
    	mTabHost.setup(this,getSupportFragmentManager(),R.id.pager);//实例化FragmentTabHost对象
    	mTabHost.setOnTabChangedListener(new TabHostListener());
    	int count = fragmentArray.length;//获取子tab的个数
    	for(int i= 0;i<count;i++){
    		//为每一个Tab按钮设置图标文字和内容
    		TabSpec tabSpec = mTabHost.newTabSpec(mTextViewArray[i]).setIndicator(getTabItemView(i));
    		mTabHost.addTab(tabSpec,fragmentArray[i],null);//将子tab添加进TabHost
    		//设置按钮的背景
    		mTabHost.getTabWidget().getChildAt(i).setBackgroundResource(color.background_dark);
    	}
    }
    
    
    private void initPager(){
    	FragmentPage1 p1 = new FragmentPage1();
    	FragmentPage2 p2 = new FragmentPage2();
    	FragmentPage3 p3 = new FragmentPage3();
    	list.add(p1);
    	list.add(p2);
    	list.add(p3);
    	vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
    }
    
    private View getTabItemView(int index){
    	View view = layoutInflater.inflate(R.layout.tabspec_layout, null);
    	ImageView img = (ImageView) view.findViewById(R.id.img);
    	img.setImageResource(mImageViewArray[index]);
    	TextView tv = (TextView) view.findViewById(R.id.tv);
    	tv.setText(mTextViewArray[index]);
    	return view;
    }
    
    class ViewPagerListener implements OnPageChangeListener{

		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onPageSelected(int arg0) {//根据焦点来确认切换到那个Tab
			TabWidget  widget = mTabHost.getTabWidget();
			int oldFocusability = widget.getDescendantFocusability();
			widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
			mTabHost.setCurrentTab(arg0);
			widget.setDescendantFocusability(oldFocusability);
		}
    	
    }
    
    class TabHostListener implements OnTabChangeListener{

		@Override
		public void onTabChanged(String tabId) {
			int position = mTabHost.getCurrentTab();
			vp.setCurrentItem(position);
		}}
    
    class MyAdapter extends FragmentPagerAdapter{

		public MyAdapter(FragmentManager fm) {
			super(fm);
			// TODO Auto-generated constructor stub
		}

		@Override
		public Fragment getItem(int arg0) {
			// TODO Auto-generated method stub
			return list.get(arg0);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return list.size();
		}
    	
    }
}

单个标签布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    
    <ImageView 
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dp"
        />
    <TextView 
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10sp"
        android:textColor="#FFFFFF"
        />

</LinearLayout>

单个fragment:

package com.example.fragmenttabhost;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentPage1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
		return inflater.inflate(R.layout.fragment, null);
    }
}

单个fragment布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher"
        />
    
    
</LinearLayout>

1.3 小结

(1)ActivityGroup可以让多个Activity在一个屏幕上集中显示;

(2)通过PopupWindow组件可以实现弹出菜单的功能。文章来源地址https://www.toymoban.com/news/detail-725796.html

到了这里,关于Android组件通信——ActivityGroup(二十五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第二十五章 开发Productions - ObjectScript Productions - 发送请求消息

    在业务服务类中, OnProcessInput() 实现应该将请求消息发送到生产中的某个目的地。为此,根据需要调用业务服务类的以下实例方法之一: SendRequestSync() 同步发送消息(等待响应)。有关详细信息,请参阅使用 SendRequestSync() 方法。 - SendRequestAsync() 异步发送消息(不等待响应)

    2024年02月07日
    浏览(53)
  • Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量

    2023年04月09日
    浏览(50)
  • 第二十九章 使用消息订阅发布实现组件通信

    PubSubJS库介绍 如果你想在 React 中使用第三方库来实现 Pub/Sub 机制, PubSubJS 是一个不错的选择。它是一个轻量级的库,可以在浏览器和 Node.js 环境中使用。 PubSubJS 提供了一个简单的 API ,可以让你在应用程序中订阅和发布消息。你可以使用 npm 来安装它: 1-引入使用 2-首先订阅

    2024年02月02日
    浏览(81)
  • Android问题笔记二十五:在构建提示“Could not resolve all files for configuration ‘:app:debugRuntimeClasspath”

    专栏分享 点击跳转=Unity3D特效百例 点击跳转=案例项目实战源码 点击跳转=游戏脚本-辅助自动化 点击跳转=Android控件全解手册 点击跳转=Scratch编程案例 点击跳转=软考全系列 众所周知,人生是一个漫长的流程,不断 克服困难 ,不断反思前进的过程。在这个过程中会产生很多对

    2024年02月03日
    浏览(49)
  • Android笔记(二十一):Room组件实现Android应用的持久化处理

    Room是Android JetPack架构组件之一,是一个持久处理的库。Room提供了在SQLite数据库上提供抽象层,使之实现数据访问。 (1)实体类(Entity):映射并封装了数据库对应的数据表中对应的结构化数据。实体定义了数据库中的数据表。实体类中的数据域与表的列一一对应。 (2)数

    2024年01月20日
    浏览(55)
  • Android Radio开发——电台扫描(十五)

            上一篇文章分析了电台列表,但最终获取的都是一个固定的电台列表,那么扫描得到的可用电台列表该如何得到。这里我们就来分析一下电台扫描的流程。         同样,对于 Radio 的扫描接口我们也是去 RadioTuner 中查找。 RadioTuner 源码位置:/frameworks/base/core/

    2024年02月06日
    浏览(89)
  • STM32CubeIDE开发(二十二), stm32的RS485/232串口通信开发要点

    目录 一、stm32串口通信         1.1 硬件流控          1.2 软件流控         1.3 串口通信参数 二、新建RS485通信工程         2.1 项目实现背景信息         2.2 项目配置         2.3 代码实现    三、RS485驱动调用及测试         3.1 接口调用        3.2 编

    2024年01月20日
    浏览(56)
  • 【正点原子STM32连载】 第二十五章 TFT-LCD(MCU屏)实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html 前面我们介绍了OLED模块及其显示,但是该模块只能显示单色/双色,不能显示彩色,而且尺寸也较小

    2024年02月11日
    浏览(51)
  • Android复习(Android基础-四大组件)——Service与Activity通信

    我们前面学会了启动和停止服务的方法,但是服务虽然是在活动里启动的,但是启动服务之后,活动与服务之间基本没什么关系了。 正常情况,我们在Activity里调用startService()方法启动MyService这个服务,然后MyService的onCreate()和onStartCommand()方法就会得到执行。之后服务会一直处

    2024年02月13日
    浏览(44)
  • STM32CubeIDE开发(二十七), stm32的WIFI通信设计(基于AT指令)

    目录 一、stm32的WIFI配置 二、代码设计 三、编译及测试 四、关于WIFI模块的串口应用 一、stm32的WIFI配置         通常WIFI模块就是一个独立的单片机,只是内置了WFIF通信软件的单片机,并该通信软件提供了AT通信指令集给开发人员,基于这些指令集我们就可以针对项目需要

    2024年02月04日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包