android:singleLine=“true”
android:tag=“personal”
android:text=“@string/text_tab_profile”
android:textColor=“@color/text_service_color”
android:textSize=“14dp” />
<FrameLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_weight=“1.0” >
<Button
android:id=“@+id/button_state4”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@null”
android:button=“@null”
android:drawableTop=“@drawable/ic_setting_selector”
android:gravity=“center”
android:singleLine=“true”
android:tag=“settings”
android:text=“@string/text_tab_setting”
android:textColor=“@color/text_service_color”
android:textSize=“14dp” />
三、在启动的Acitvity界面中使用自定义的Tab类
<?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” >
<FrameLayout
android:id=“@+id/layout_content”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_weight=“1.0” />
<app.ui.widget.TabView
android:id=“@+id/view_tab”
android:layout_width=“match_parent”
android:layout_height=“@dimen/header_height”
android:background=“@color/tab_main_color” />
四、自定义类处理Fragment返回重叠的问题
/*******************************************************************************
-
Copyright © Baina Info Tech Co. Ltd
-
FragmentUtils
-
app.util.FragmentUtils.java
-
TODO: File description or class description.
-
@changeLogs:
-
1.0.0: First created this class.
******************************************************************************/
package app.util;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
/**
-
FragmentUtils of MyHealth
-
@author qixiao
*/
public class FragmentUtils {
private FragmentUtils() {
}
public static Fragment replaceFragment(FragmentManager fragmentManager, int container,
Class<? extends Fragment> newFragment, Bundle args) {
return replaceFragment(fragmentManager, container, newFragment, args, false);
}
public static Fragment replaceFragment(FragmentManager fragmentManager, int container,
Fragment newFragment) {
return replaceFragment(fragmentManager, container, newFragment, false);
}
public static Fragment replaceFragment(FragmentManager fragmentManager, int container,
Class<? extends Fragment> newFragment, Bundle args, boolean addToBackStack) {
Fragment fragment = null;
// 构造新的Fragment
try {
fragment = newFragment.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (fragment != null) {
// 设置参数
if (args != null && !args.isEmpty()) {
final Bundle bundle = fragment.getArguments();
if (bundle != null) {
bundle.putAll(args);
} else {
fragment.setArguments(args);
}
}
// 替换
return replaceFragment(fragmentManager, container, fragment, addToBackStack);
} else {
return null;
}
}
public static Fragment replaceFragment(FragmentManager fragmentManager, int container,
Fragment newFragment, boolean addToBackStack) {
final FragmentTransaction transaction = fragmentManager.beginTransaction();
final String tag = newFragment.getClass().getSimpleName();
if (newFragment != null) {
transaction.replace(container, newFragment, tag);
}
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commitAllowingStateLoss();
return newFragment;
}
public static Fragment switchFragment(FragmentManager fragmentManager, int container,
Fragment currentFragment, Class<? extends Fragment> newFragment, Bundle args) {
return switchFragment(fragmentManager, container, currentFragment, newFragment, args, false);
}
/**
-
@param fragmentManager
-
@param container
-
@param currentFragment
-
@param newFragment
-
@param args 新Fragment的参数
-
@param addToBackStack 这个操作是否加入栈中,如果要实现类似返回效果,则需要。
-
@return 新显示的Fragment
*/
public static Fragment switchFragment(FragmentManager fragmentManager, int container,
Fragment currentFragment, Class<? extends Fragment> newFragment, Bundle args,
boolean addToBackStack) {
final FragmentTransaction transaction = fragmentManager.beginTransaction();
final String tag = newFragment.getSimpleName();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
// 如果在栈中找到相应的Fragment,则显示,否则重新生成一个
if (fragment != null) {
if (fragment != currentFragment) {
if (currentFragment != null) {
transaction.hide(currentFragment);
}
transaction.show(fragment);
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commitAllowingStateLoss();
} else {
fragment.getArguments().putAll(args);
}
return fragment;
} else {
try {
fragment = newFragment.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
// 为新的Fragment添加参数
if (fragment != null) {
if (args != null && !args.isEmpty()) {
final Bundle bundle = fragment.getArguments();
if (bundle != null) {
bundle.putAll(args);
} else {
fragment.setArguments(args);
}
}
}
// 显示新的Fragment
if (currentFragment != null) {
transaction.hide(currentFragment);
}
transaction.add(container, fragment, tag);
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commitAllowingStateLoss();
return fragment;
}
}
源码连接****地址:http://download.csdn.net/detail/gao_chun/7645909
五、自定义控件系列
Android项目中使用自定义进度加载Dialog:http://blog.csdn.net/gao_chun/article/details/45270031
ListView中按钮监听器 设置 及 优化:http://blog.csdn.net/gao_chun/article/details/41249131
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
《系列学习视频》
《系列学习文档》
《我的大厂面试之旅》
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-zICmKQi1-1711740999699)]
新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
《系列学习视频》
[外链图片转存中…(img-GY7LzbEP-1711740999699)]
《系列学习文档》
[外链图片转存中…(img-c9F8nLyc-1711740999699)]
《我的大厂面试之旅》
[外链图片转存中…(img-lNwPEPrP-1711740999700)]