FadingActionBar的使用

来源:互联网 发布:js缺少对象,怎样调试 编辑:程序博客网 时间:2024/06/06 00:47

在经过被折磨了两天之后,终于搞出来了。。。

下载地址https://github.com/ManuelPeinado/FadingActionBar

我用的Android studio,这绝对是个坑。。但是又太好用了。。没办法硬着头皮搞吧。(Eclipse的同学就不清楚能不能适用了)

首先,下载,解压。然后。。(建议建一个library的文件夹,用来管理这些library)

1.导入library。library包,没什么好说的。(只导入这个包就可以用)

2.导入extras-actionbarsherlock包,(extras-actionbarcompat效果是差不多的具体我也没搞清楚- -)


ok,问题来了,有时候你会发现,library包或者actionbarsherlock导不进去!这是有多坑!  

解决办法:这是Android studio的一个bug,已经存在了好久了。。方法就是重命名library包,或者剪切到其他文件夹。


然后你又会发现,这些根本编译不了。。因为很多文件不适用,有的因为找不到,有的因为版本不够。

ok,一个一个来。先去改library的。(就是你改了名字的)

Android studio是用gradle来把代码整合编译的,(这样说可能有点不准确,但是我是这样理解的)所以找到对应Module里的build.gradle文件,更改里面的内容。

很多东西系统自动找不到,你可以把那些删了,改成自己的。我的就改成了这样。

apply plugin: 'android-library'android {    compileSdkVersion 19    buildToolsVersion "20.0.0"    defaultConfig {        versionCode 1        versionName "1.0"        targetSdkVersion 19    }    sourceSets {        main {            manifest.srcFile 'AndroidManifest.xml'            java.srcDirs = ['src']            res.srcDirs = ['res']        }    }}//apply from: '../maven_push.gradle'

注意最后一行注释或者删掉。

然后是另一个。

apply plugin: 'android-library'dependencies {    compile project(':library')    compile "com.android.support:support-v4:20.0.0"    compile ("com.actionbarsherlock:actionbarsherlock:[4.4,)@aar") {        // Need to specifically exclude this as it is specified in ActionBarSherlock pom        exclude group: 'com.google.android', module: 'support-v4'    }}android {    compileSdkVersion 19    buildToolsVersion '20.0.0'    defaultConfig {        versionName '1.0'        versionCode 19        targetSdkVersion 19    }    sourceSets {        main {            manifest.srcFile 'AndroidManifest.xml'            java.srcDirs = ['src']            res.srcDirs = ['res']        }    }}//apply from: '../maven_push.gradle'
注意最开始那几行,    compile project(':library')  就是引用原来的那个library,如果你改了那个library的名字,这里改成相应的名字就可以了。

compile "com.android.support:support-v4:20.0.0"   support包,这里如果不改的话会报Android L的错,就是你用的最低版本太低了,不能适用于Android L,这里原来是[n,m)高中数学,想想就记起来了吧。它会默认使用最高版本的支持包,所以才会出错。

接下来就好点了。

原本这里是需要配置文件的,就是在项目的最外面,不过我觉得还是自己改了来的方便。


3.使用

(1)首先引入library(或者extras-actionbarsherlock,建议使用library包),这一个包就够了,其他的这个都已经包含了,所以不用管其他的。

(2)布局。先看下面一段FadingActionBarHelper的代码。知道这几块就好了。

        FadingActionBarHelper helper = new FadingActionBarHelper()
                .actionBarBackground(R.drawable.ab_background)  //当listView到最上面时的actionbar
                .headerLayout(R.layout.header)                  //listView上面一块的layout
             
         .contentLayout(R.layout.activity_listview);     //下面的listView
转回布局,由这三个方法可以看出,这三块其实是分开的,所以才能达到把图片顶出的效果。

.actionBarBackground就是一张图片

.headerLayout是你想方在listview上面的layout

  .contentLayout(R.layout.activity_listview);    你的listview

(3)Activity 基本上都讲了。直接上代码吧。

.headerLayout(R.layout.header)    

<?xml version="1.0" encoding="utf-8"?><ImageView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/image_header"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:adjustViewBounds="true"    android:scaleType="centerCrop"    android:src="@drawable/shuihan" />
.contentLayout(R.layout.activity_listview);

<ListView xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@android:id/list"    android:cacheColorHint="@android:color/transparent"    android:layout_width="match_parent"    android:layout_height="match_parent" />
这里要注意,listview的id一定要用@android格式的,不然是没有效果的。(因为这个id是library自己定义好的,在滑动的时候需要得到这个id)

然后是Activity

package com.example.app.fadingactionbar;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.manuelpeinado.fadingactionbar.FadingActionBarHelper;import java.util.ArrayList;import java.util.List;public class MyActivity extends Activity {    private ListView listview;    private List<String> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        FadingActionBarHelper helper = new FadingActionBarHelper()                .actionBarBackground(R.drawable.ab_background)  //当listView到最上面时的actionbar                .headerLayout(R.layout.header)                  //listView上面一块的layout                .contentLayout(R.layout.activity_listview);     //下面的listView        setContentView(helper.createView(this));        helper.initActionBar(this);        list = new ArrayList<String>();        for (int i = 0; i < 40; i++) {            list.add("test1");        }        listview = (ListView) findViewById(android.R.id.list);        listview.setAdapter(new mAdapter());    }    class mAdapter extends BaseAdapter {        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int i) {            return list.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            if(view == null){                view = getLayoutInflater().inflate(R.layout.listview_item,null);                TextView title = (TextView) view.findViewById(R.id.title);                title.setText(list.get(i));            }            return view;        }    }}
注意listview的findviewbyid哦



还有就是。。(废话真多)开源项目的更新是我们无法想象的,一定要多去尝试,多去折腾,问题解决的那一刻,那种感觉是什么都替代不了的。
















1 0
原创粉丝点击