一、新建一个不带activity的项目:
File->New->New Project
填写Application name和Company Domain。点击Next,选择no activity。
点击Project中的项目视图,选择Project形式的项目树,
然后在src->main->java->【刚刚创建的包名】->new 一个java class,
填写名字,后点OK,接着在里面填写相关代码。继承Activity类。重写onCreate()方法。
在res文件夹上点击右键,new一个directory,填写layout,点OK。
在layout上点右键,new一个XML->Layout XML File,填写名字,根元素。Finish
在下方,Design是可以通过拖拽的方式编辑布局,Text是通过XML文件的方式
来编辑布局。
或者直接new empty activity
二、如何关闭安卓手机显示字体的大写:
活动配置文件里:
android:textAllCaps="false" 关闭字母的大写
三、启动模式的各个分类:
AndroidManifest.xml里:
android:launchMode="standard" 表示同一个任务栈里,可以有不同的活动ID
android:launchMode="singleTop" 表示同一个任务栈里,处在栈顶的活动只有一个ID,而非栈顶的活动,可以有不同的ID
android:launchMode="singleTask"表示同一个任务栈里,一个活动只有一个ID,当其他活动新建一个已经存在的活动时,其他活动会自动结束,回到已存在的活动。
android:launchMode="singleInstance"表示独立的一个任务栈只存放一个活动。若新建活动,则直接新建任务栈。
五、【如何远程从另一个App2中启动一个App1的Service:】
六、【如何远程从另一个App2中绑定一个App1的Service:】
******用AIDL 机制:******
在这个App1中创建一个AIDL,然后使Service 的IBinder返回一个new IMain1AIDL.Stub() {};
然后在App2中也创建一个一模一样的AIDLfolder和AIDL,然后在App2的Aty中的
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder= IMain1AIDL.Stub.asInterface(service);
}
用这种方式强制类型转换在App1的Service中的IBinder返回的 new IMain1AIDL.Stub() {};类型 给一个这个App2中的AIDL的对象:private IMain1AIDL binder=null;
这样,这个App2中的binder里的数据,就是App1中的数据。
七、【如何新建一个fragment的project】
首先,不用IDE自带的fragment,也就是不选择blank activity和里面的勾选fragment。
也就是拒绝IDE 帮我们建立fragment。因为会添加很多无关的代码。
然后,我们选择empty activity,新建完成后,我们就可以在包名上,点击右键
新建一个Fragment(blank),然后把里面的
Create layout XML? 选上
Include fragment factory methods? 和 Include interface callbacks? 都不选,主要是一下方法和接口。我们需要的话自己写就好了,AS提供的代码提示很方便。
点击finish,然后就需要注册一个android:id 这样就可以用动态的fragment:
public class FragmentApp extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newone_fragment); //在这里,设置了一个无控件的layout的xml文件
if(savedInstanceState == null) //动态的fragment调用。
{
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment,new FragmentAppFragment()) //这里为已注册的android:id
.commit();
}
}
}
那么怎么注册呢,就在上面的无控件的layout的xml文件里,添加一行:android:id="@+id/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"
android:id="@+id/fragment" //就可以了!
>
</LinearLayout>
PS:可以不为空的配置文件,如果部位空,那么它上面的控件,在其他所有的fragment上都存在,即都会显示出来。
八、【在带侧边栏的activity里的按钮怎么打开一个新的fragment呢】
首先,创建一个navigation的活动。
删除多余的代码,接着在
SliderActivity里面的一个函数:
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) { //这个函数就是侧边栏里按钮的监听事件,当然这个可以自定义。
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.drawer_layout,new BlankFragment()) //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
.commit();
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
上面代码的核心就是:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.drawer_layout,new BlankFragment()) //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
.commit();
这里的R.id.drawer_layout,是指sliderActivity的setcontentview里的布局的id:
setContentView(R.layout.activity_slider); //也就是这个布局的id :
//activity_slider.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout" //【【 id 】】在这里
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_slider"
app:menu="@menu/activity_slider_drawer" />
</android.support.v4.widget.DrawerLayout>
File->New->New Project
填写Application name和Company Domain。点击Next,选择no activity。
点击Project中的项目视图,选择Project形式的项目树,
然后在src->main->java->【刚刚创建的包名】->new 一个java class,
填写名字,后点OK,接着在里面填写相关代码。继承Activity类。重写onCreate()方法。
在res文件夹上点击右键,new一个directory,填写layout,点OK。
在layout上点右键,new一个XML->Layout XML File,填写名字,根元素。Finish
在下方,Design是可以通过拖拽的方式编辑布局,Text是通过XML文件的方式
来编辑布局。
或者直接new empty activity
二、如何关闭安卓手机显示字体的大写:
活动配置文件里:
android:textAllCaps="false" 关闭字母的大写
三、启动模式的各个分类:
AndroidManifest.xml里:
android:launchMode="standard" 表示同一个任务栈里,可以有不同的活动ID
android:launchMode="singleTop" 表示同一个任务栈里,处在栈顶的活动只有一个ID,而非栈顶的活动,可以有不同的ID
android:launchMode="singleTask"表示同一个任务栈里,一个活动只有一个ID,当其他活动新建一个已经存在的活动时,其他活动会自动结束,回到已存在的活动。
android:launchMode="singleInstance"表示独立的一个任务栈只存放一个活动。若新建活动,则直接新建任务栈。
四、如何将活动改为不给其他应用调用:
android:exported="false" 表示此活动不给别的应用调用五、【如何远程从另一个App2中启动一个App1的Service:】
在App2中的Aty中,用Intent intent=new Intent();
然后 intent.setComponent(new ComponentName("","")); //用此setComponent方法
两个参数分别为:App1的Service的包的地址,App1的Service的类的地址。
六、【如何远程从另一个App2中绑定一个App1的Service:】
******用AIDL 机制:******
在这个App1中创建一个AIDL,然后使Service 的IBinder返回一个new IMain1AIDL.Stub() {};
然后在App2中也创建一个一模一样的AIDLfolder和AIDL,然后在App2的Aty中的
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder= IMain1AIDL.Stub.asInterface(service);
}
用这种方式强制类型转换在App1的Service中的IBinder返回的 new IMain1AIDL.Stub() {};类型 给一个这个App2中的AIDL的对象:private IMain1AIDL binder=null;
这样,这个App2中的binder里的数据,就是App1中的数据。
七、【如何新建一个fragment的project】
首先,不用IDE自带的fragment,也就是不选择blank activity和里面的勾选fragment。
也就是拒绝IDE 帮我们建立fragment。因为会添加很多无关的代码。
然后,我们选择empty activity,新建完成后,我们就可以在包名上,点击右键
新建一个Fragment(blank),然后把里面的
Create layout XML? 选上
Include fragment factory methods? 和 Include interface callbacks? 都不选,主要是一下方法和接口。我们需要的话自己写就好了,AS提供的代码提示很方便。
点击finish,然后就需要注册一个android:id 这样就可以用动态的fragment:
public class FragmentApp extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newone_fragment); //在这里,设置了一个无控件的layout的xml文件
if(savedInstanceState == null) //动态的fragment调用。
{
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment,new FragmentAppFragment()) //这里为已注册的android:id
.commit();
}
}
}
那么怎么注册呢,就在上面的无控件的layout的xml文件里,添加一行:android:id="@+id/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"
android:id="@+id/fragment" //就可以了!
>
</LinearLayout>
PS:可以不为空的配置文件,如果部位空,那么它上面的控件,在其他所有的fragment上都存在,即都会显示出来。
八、【在带侧边栏的activity里的按钮怎么打开一个新的fragment呢】
首先,创建一个navigation的活动。
删除多余的代码,接着在
SliderActivity里面的一个函数:
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) { //这个函数就是侧边栏里按钮的监听事件,当然这个可以自定义。
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.drawer_layout,new BlankFragment()) //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
.commit();
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
上面代码的核心就是:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.drawer_layout,new BlankFragment()) //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
.commit();
这里的R.id.drawer_layout,是指sliderActivity的setcontentview里的布局的id:
setContentView(R.layout.activity_slider); //也就是这个布局的id :
//activity_slider.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout" //【【 id 】】在这里
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_slider"
app:menu="@menu/activity_slider_drawer" />
</android.support.v4.widget.DrawerLayout>