目前我使用Styles.xml结合java代码来定义PullToRefresh自定义。我想只通过java代码进行所有自定义,而不是用XML定义它们。我可以以编程方式实现所有自定义吗?
这是我的xml自定义:
<!-- PullToRefresh Customizations -->
<style name="Theme.Holo.CustomPtrHeader" parent="Theme.Sherlock">
<item name="ptrHeaderStyle">@style/Widget.Custom.PtrHeader</item>
</style>
<style name="Widget.Custom.PtrHeader" parent="android:Widget">
<!-- The background of the header view -->
<item name="ptrHeaderBackground">#FF69B4</item>
<!-- Color to tint the progress bar -->
<item name="ptrProgressBarColor">#FF69B4</item>
<!-- The strings to be displayed at the various states -->
<item name="ptrPullText">Pull To Refresh</item>
<item name="ptrRefreshingText">Refreshing News</item>
<item name="ptrReleaseText">Loading...</item>
</style>
Java代码:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewGroup viewGroup = (ViewGroup) view;
mPullToRefreshLayout = new PullToRefreshLayout(activity);
ActionBarPullToRefresh
.from(activity)
.insertLayoutInto(viewGroup)
.theseChildrenArePullable(R.id.gridview_news_grid,
android.R.id.empty).listener(this)
.setup(mPullToRefreshLayout);
}
@Override
public void onRefreshStarted(View view) {
if (Const.DEBUGGING)
Log.d(Const.DEBUG, "PullToRefresh Started");
gridview.setVisibility(View.INVISIBLE);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
getDataFromServer();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mPullToRefreshLayout.setRefreshComplete();
if (getView() != null) {
gridview.setVisibility(View.VISIBLE);
}
}
}.execute();
}
我认为我可以使用Options()来执行此操作,但不确定如何正确执行此操作。有人可以帮我解决这个问题。
答案 0 :(得分:9)
好的..所以我确实调查了很多,这就是我解决问题的方法。我们可以使用DefaultHeaderTransformer
类完全控制“PullToRefresh”。我从Styles.xml中删除了“PullToRefresh”自定义,并使用下面的代码更改进度条的颜色并查看整个背景。您可以根据需要对其进行试验。如果您有任何问题,我可以回答。
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewGroup viewGroup = (ViewGroup) view;
mPullToRefreshLayout = new PullToRefreshLayout(activity);
ActionBarPullToRefresh
.from(activity)
.options(Options.create().scrollDistance(.75f).build())
.insertLayoutInto(viewGroup)
.theseChildrenArePullable(R.id.gridview_features_grid,
android.R.id.empty).listener(this)
.setup(mPullToRefreshLayout);
DefaultHeaderTransformer transformer = (DefaultHeaderTransformer) mPullToRefreshLayout
.getHeaderTransformer();
transformer.getHeaderView().findViewById(R.id.ptr_text)
.setBackgroundColor(getResources().getColor(R.color.blue));
transformer.setProgressBarColor(getResources().getColor(R.color.blue));
}
截图: