我正在开发一个可以查看BusStop时间表的应用程序。用户可以使用ActionBar PullToRefresh(库)进行刷新。我的应用程序还启用了KitKat上的半透明状态栏。
现在ActionBar Overlay(通常应该与动作栏重叠)现在向上移动。
我该如何解决?
祝你好运!
答案 0 :(得分:10)
我所做的是为pull-to-refresh布局创建自定义标题布局。我只是复制了原来的一个,添加了状态栏的高度,通常为25dp,并添加了25dp的顶部填充。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="73dp"
android:paddingTop="25dp" >
<FrameLayout
android:id="@id/ptr_content"
android:layout_width="match_parent"
android:layout_height="73dp" >
<TextView
android:id="@id/ptr_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
</FrameLayout>
<fr.castorflex.android.smoothprogressbar.SmoothProgressBar
android:id="@id/ptr_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/ptr_progress_bar_stroke_width" />
</RelativeLayout>
现在,在设置拉动刷新布局时设置布局:
ActionBarPullToRefresh.from(getActivity()).listener(new OnRefreshListener() {
@Override
public void onRefreshStarted(View view) {
refresh();
}
}).headerLayout(R.layout.header).build()).setup(ptrLayout);
答案 1 :(得分:1)
试试这个。
RES /布局/ activity_main.xml中
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.swipetorefresh.MainActivity"
tools:ignore="MergeRootFrame" />
RES /布局/ fragment_main.xml
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MergeRootFrame" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
public static class PlaceholderFragment extends ListFragment implements OnRefreshListener {
private SwipeRefreshLayout mSwipeRefreshLayout;
private static final int LIST_ITEM_COUNT = 5;
private int mOffset = 0;
private ArrayAdapter<String> mListAdapter;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
// Configure the swipe refresh layout
mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.container);
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.setColorScheme(
R.color.swipe_color_1, R.color.swipe_color_2,
R.color.swipe_color_3, R.color.swipe_color_4);
// Put the first batch of countries in the list
mListAdapter = new ArrayAdapter<String>(
getActivity(),
android.R.layout.simple_list_item_1,
android.R.id.text1,
getCountries(mOffset));
setListAdapter(mListAdapter);
return rootView;
}
private List<String> getCountries(int offset) {
ArrayList<String> countriesList = new ArrayList<String>();
for(int i=0; i<LIST_ITEM_COUNT;i++){
countriesList.add(COUNTRIES[offset+i]);
}
mOffset = offset + LIST_ITEM_COUNT;
return countriesList;
}
@Override
public void onRefresh() {
// Start showing the refresh animation
mSwipeRefreshLayout.setRefreshing(true);
// Simulate a long running activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
updateCountries();
}
}, 5000);
}
private void updateCountries() {
// Add the next batch of countries to the list
mListAdapter.addAll(getCountries(mOffset));
// Signify that we are done refreshing
mSwipeRefreshLayout.setRefreshing(false);
}
private static final String[] COUNTRIES = {"Afghanistan",
"Albania", "Algeria", "American Samoa", "Andorra", "Angola",
"Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus",
"Belgium", "Belize", "Benin", "Bermuda", "Bhutan",
"Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil",
"Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi",
"Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands",
"Central African Republic", "Chad", "Chile", "China",
"Christmas Island", "Cocos (Keeling) Islands", "Colombia",
"Comoros", "Democratic Republic of the Congo (Kinshasa)",
"Congo, Republic of(Brazzaville)", "Cook Islands", "Costa Rica",
"Ivory Coast", "Croatia", "Cuba", "Cyprus", "Czech Republic",
"Denmark", "Djibouti", "Dominica", "Dominican Republic",
"East Timor (Timor-Leste)", "Ecuador", "Egypt",
"El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia"};
}
}