2014-02-25 29 views
1

目前,我正在使用Styles.xml与Java代码结合来定义PullToRefresh自定义。我只想通过Java代码来完成所有的定制,而不是用XML定义它们。我可以通过编程实现所有的自定义吗?ActionBar - PullToRefresh以编程方式实现而不使用样式

这里是我的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(); 
} 

我想我可以使用选项()这样做的,但不知道如何正确地做到这一点。有人可以帮我解决这个问题。

回答

9

OK ..所以我确实仔细研究过,这里是我解决问题的方法。我们可以使用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)); 
} 

截图:

enter image description here

enter image description here

相关问题